zoukankan      html  css  js  c++  java
  • mybatis(1):入坑篇


    依赖

            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.4.0</version>
            </dependency>
            <!-- 测试数据库 -->
            <dependency>
                <groupId>org.hsqldb</groupId>
                <artifactId>hsqldb</artifactId>
                <version>2.3.4</version>
            </dependency>
    

    myBatis 配置

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <!-- 引入properties配置文件 -->
        <properties resource="jdbc.properties"/>
        <environments default="test">
            <environment id="test">
                <transactionManager type="JDBC" />
                <dataSource type="UNPOOLED">
                    <property name="driver" value="${hsqldb.driver}" />
                    <property name="url" value="${hsqldb.url}" />
                    <property name="username" value="${hsqldb.username}" />
                    <property name="password" value="${hsqldb.password}" />
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <!-- mapping 配置: 加载 Mapper.xml 和 Mapper.class -->
            <mapper class="com.github.xsj.model.Mapper"/>
        </mappers>    
    </configuration>
    

    映射配置

    使用 Mapper wrapper

    package com.github.xsj.model;
    
    public class User {
    
        private Long id;   // id 使用 Long 类型而非 long
        private String name;
        ...
    }
    

    Wrapper:

    package com.github.xsj.model;
    
    public interface Mapper {
    
        User getUser(long id);
    
        void insertUser(User user);
    
        @Update("update users set name = #{name}")
        void updateUser(User user);
    
        @Delete("delete from users where id = #{id}")
        void deleteUser(long id);
    
    }
    

    映射文件: srcmain esourcescomgithubxsjmodelMapper.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.github.xsj.model.Mapper">
        <select id="getUser" resultType="com.github.xsj.model.User">
            select * from users where id = #{id}
        </select>
        <!-- get generated key! Note: keyColumn 之所以使用 ID 而非 id 是 hsqldb 将列名强行转换为大写所导致 -->
        <insert id="insertUser" useGeneratedKeys="true" keyProperty="id" keyColumn="ID">
              insert into users values(#{id}, #{name})
        </insert>
    </mapper>
    

    单元测试

    sql 脚本

    drop table users if exists;
    create table users (
      id INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1, INCREMENT BY 1) primary key,
      name varchar(126) not null
    );
    insert into users(name) values('User1');
    

    样例

    public class BaseTest {
     
        private final static Logger log =  LoggerFactory.getLogger(BaseTest.class);
     
        private static SqlSessionFactory sqlSessionFactory;
     
        @BeforeClass
        public static void setUp() throws Exception{
            Reader reader = Resources.getResourceAsReader("mybatis-test-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            reader.close();
            // 数据初始化
            SqlSession session = sqlSessionFactory.openSession();
            Connection conn = session.getConnection();
            reader = Resources.getResourceAsReader("com/github/xsj/model/CreateDB.sql");
            ScriptRunner runner = new ScriptRunner(conn);
            runner.setLogWriter(new PrintWriter(System.out));
            runner.runScript(reader);
            reader.close();
            conn.close();
            session.close();
        }
     
        @Test
        public void selectTest() {
            SqlSession session = sqlSessionFactory.openSession();
            try {
                Mapper mapper = session.getMapper(Mapper.class);
                assertThat(mapper.getUser(1), is(notNullValue()));
            } finally {
                session.close();
            }
        }
        ...
    }
    

    源码: https://github.com/xsj24/mybaits-getStarted/tree/v1.0.0

  • 相关阅读:
    分布式事务的四种解决方案
    十大经典排序算法
    Vineyard 加入 CNCF Sandbox,将继续瞄准云原生大数据分析领域
    因你不同,2021 阿里云开发者大会重磅开启 @ 所有开发者!
    【深度】阿里巴巴万级规模 K8s 集群全局高可用体系之美
    业界率先支持 MCP-OVER-XDS 协议,Nacos 2.0.1 + 1.4.2 Release 正式发布
    被解救的代码
    KubeVela + KEDA:为应用带来“与生俱来”的弹性伸缩能力
    论好文章和烂文章
    Fluid 进入 CNCF Sandbox,加速大数据和 AI 应用拥抱云原生
  • 原文地址:https://www.cnblogs.com/xsj24/p/5996017.html
Copyright © 2011-2022 走看看