【Mybatis】学习

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。【Mybatis】学习,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

Mybatis 学习

环境搭建

pom.xml

     <!--log4j-->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.6.6</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.6.6</version>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.16</version>
    </dependency>
    <!--mybatis-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.6</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.47</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
    </dependency> 

mybatis.properties

# jdbc
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456

#dbcp
initialSize=0   
maxActive=10  
maxIdle=10   
minIdle=1  
maxWait=60000 

mybatis-config.xml

<?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>

    <!-- 不建议使用这种方式定义别名,但要知道
    <typeAlias type="com.zhengqing.mybatis.bean.User" ></typeAlias>  -->

    <!-- 自定义别名:  typeAliases:类型的别名 -->
<!--    <typeAliases>-->
<!--        &lt;!&ndash; typeAlias:这个type和alias的关系 -》 一一关系-->
<!--         注意:如果不写alias,默认是类型的简单类名:首字母大小写无关,但是建议使用的时候使用大写! &ndash;&gt;-->
<!--        &lt;!&ndash; 表示这个包路径下的所有的类都有别名,默认简单类名 &ndash;&gt;-->
<!--        <package name="com.kdgc.wangxianlin.entity"></package>-->
<!--    </typeAliases>-->

    <!-- 引用mybatis.properties配置文件 -->
    <properties resource="mybatis.properties" />
    <!--日志输出的方式-->
    <settings>
        <setting name="logImpl" value="LOG4J" />
        <setting name="cacheEnabled" value="true"/>
    </settings>

    <!-- environments:多个环境   development:开发 -->
    <environments default="development">
        <!--可以设置多个数据库的链接   id是唯一的标识,通过id来进行区分-->
        <environment id="development">
            <!--transactionManager事务控制-->
            <transactionManager type="JDBC" />
            <!-- 配置数据库连接信息 -->
            <dataSource type="POOLED">
                <!-- value属性值引用db.properties配置文件中配置的值 -->
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
    <!-- 映射文件 在这代表的是映射文件的地址-->
    <mappers>
        <mapper resource="mapper/UserDao.xml" />
    </mappers>
</configuration>

log4j.properties

log4j.rootLogger=DEBUG,stdout
### console ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

### mybatis ###
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=ERROR
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

测试准备

 SqlSession openSession = null;
    
    /**
     * 创建会话工厂
     * @return
     * @throws IOException
     */
    @Before
    public void getSqlSessionFactory() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        openSession = sqlSessionFactory.openSession();
    }


    @After
    public void closeOpsession() throws IOException {
        if(openSession!=null){
            openSession.close();
        }
    }

新增

 <!--新增所有列-->
    <insert id="insert" keyProperty="id" useGeneratedKeys="true">
        insert into test.user(user_name, age, nick_name, create_time)
        values (#{userName}, #{age}, #{nickName}, #{createTime})
    </insert>

UserDao.java

    /**
     * 新增数据
     *
     * @param user 实例对象
     * @return 影响行数
     */
    int insert(User user);

UserDaoTest.java

  /**
     * 新增
     * @throws IOException
     */
    @Test
    public void insert() throws IOException {
        UserDao userDao = openSession.getMapper(UserDao.class);
        User user = new User();
        user.setUserName("Tony");
        user.setNickName("托尼");
        user.setAge(24);
        int res = userDao.insert(user);
        System.out.println(res);
        openSession.commit();
    }

日志

Connected to the target VM, address: '127.0.0.1:55181', transport: 'socket'
DEBUG - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
DEBUG - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - Opening JDBC Connection
DEBUG - Created connection 685558284.
DEBUG - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@28dcca0c]
DEBUG - ==>  Preparing: insert into test.user(user_name, age, nick_name, create_time) values (?, ?, ?, ?) 
DEBUG - ==> Parameters: halo(String), 22(Integer), Halos(String), null
DEBUG - <==    Updates: 1
1
DEBUG - Committing JDBC Connection [com.mysql.jdbc.JDBC4Connection@28dcca0c]
Disconnected from the target VM, address: '127.0.0.1:55181', transport: 'socket'

修改

UserDao.xml

 <!--通过主键修改数据-->
    <update id="update">
        update test.user
        <set>
            <if test="userName != null and userName != ''">
                user_name = #{userName},
            </if>
            <if test="age != null">
                age = #{age},
            </if>
            <if test="nickName != null and nickName != ''">
                nick_name = #{nickName},
            </if>
            <if test="createTime != null">
                create_time = #{createTime},
            </if>
        </set>
        where id = #{id}
    </update>

UserDao.java

/**
     * 修改数据
     *
     * @param user 实例对象
     * @return 影响行数
     */
    int update(User user);

UserDaoTest.java

     /**
     * 修改
     * @throws IOException
     */
    @Test
    public void updateById() throws IOException {
        UserDao userDao = openSession.getMapper(UserDao.class);
        User user = new User();
        user.setId(3);
        user.setUserName("Tony");
        user.setNickName("托尼");
        user.setAge(24);
        int res = userDao.update(user);
        System.out.println(res);
        openSession.commit();
    }

日志

DEBUG - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
DEBUG - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - Opening JDBC Connection
DEBUG - Created connection 1686369710.
DEBUG - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@6483f5ae]
DEBUG - ==>  Preparing: update test.user SET user_name = ?, age = ?, nick_name = ? where id = ? 
DEBUG - ==> Parameters: helo(String), 24(Integer), Helos(String), 3(Integer)
DEBUG - <==    Updates: 1
1

删除

UserDao.xml

  <!--通过主键删除-->
    <delete id="deleteById">
        delete from test.user where id = #{id}
    </delete>

UserDao.java

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    int deleteById(Integer id);

UserDaoTest.java

   /**
     * 删除
     * @throws IOException
     */
    @Test
    public void deleteById() throws IOException {
        UserDao userDao = openSession.getMapper(UserDao.class);
        int res = userDao.deleteById(3);
        System.out.println(res);
        openSession.commit();
    }

日志

DEBUG - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
DEBUG - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - Opening JDBC Connection
DEBUG - Created connection 1739876329.
DEBUG - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@67b467e9]
DEBUG - ==>  Preparing: delete from test.user where id = ? 
DEBUG - ==> Parameters: 3(Integer)
DEBUG - <==    Updates: 1
1

查询

UserDao.xml

  <!--通过实体作为筛选条件查询-->
    <select id="queryAll" resultMap="UserMap">
        select
        id, user_name, age, nick_name, create_time
        from test.user
        <where>
            <if test="id != null">
                and id = #{id}
            </if>
            <if test="userName != null and userName != ''">
                and user_name = #{userName}
            </if>
            <if test="age != null">
                and age = #{age}
            </if>
            <if test="nickName != null and nickName != ''">
                and nick_name = #{nickName}
            </if>
            <if test="createTime != null">
                and create_time = #{createTime}
            </if>
        </where>
    </select>

UserDao.java

   /**
     * 通过实体作为筛选条件查询
     *
     * @param user 实例对象
     * @return 对象列表
     */
    List<User> queryAll(User user);

UserDaoTest.java

 /**
     * 按条件查询所有
     * @throws IOException
     */
    @Test
    public void queryAll() throws IOException {
        UserDao userDao = openSession.getMapper(UserDao.class);
        User user = new User();
        user.setAge(24);
        List<User> list= userDao.queryAll(user);
        System.out.println(list.toString());
    }

日志

DEBUG - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
DEBUG - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - Cache Hit Ratio [com.kdgc.wangxianlin.dao.UserDao]: 0.0
DEBUG - Opening JDBC Connection
DEBUG - Created connection 1475491159.
DEBUG - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@57f23557]
DEBUG - ==>  Preparing: select id, user_name, age, nick_name, create_time from test.user WHERE age = ? 
DEBUG - ==> Parameters: 24(Integer)
DEBUG - <==      Total: 1
[User{id=4, userName='Tony', age=24, nickName='托尼', createTime=null}]

批量新增/删除

批量新增

UserDao.xml

    <insert id="insertBatch" keyProperty="id" useGeneratedKeys="true">
        insert into test.user(user_name, age, nick_name, create_time)
        values
        <foreach collection="entities" item="entity" separator=",">
            (#{entity.userName}, #{entity.age}, #{entity.nickName}, #{entity.createTime})
        </foreach>
    </insert>

UserDao.java

    /**
     * 批量新增数据(MyBatis原生foreach方法)
     *
     * @param entities List<User> 实例对象列表
     * @return 影响行数
     */
    int insertBatch(@Param("entities") List<User> entities);

UserDaoTest.java

 /**
     * 批量插入
     * @throws IOException
     */
    @Test
    public void insertBatch() throws IOException {
        UserDao userDao = openSession.getMapper(UserDao.class);
        List<User> list= new ArrayList<>();
        User user = new User();
        user.setUserName("Tony");
        user.setNickName("托尼");
        user.setAge(24);

        list.add(user);
        User user2 = new User();
        user2.setUserName("Hony");
        user2.setNickName("哈尼");
        user2.setAge(22);
        list.add(user2);

        int res= userDao.insertBatch(list);
        System.out.println(res);
        openSession.commit();
    }

日志

DEBUG - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
DEBUG - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - Opening JDBC Connection
DEBUG - Created connection 323326911.
DEBUG - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@134593bf]
DEBUG - ==>  Preparing: insert into test.user(user_name, age, nick_name, create_time) values (?, ?, ?, ?) , (?, ?, ?, ?) 
DEBUG - ==> Parameters: Tony(String), 24(Integer), 托尼(String), null, Hony(String), 22(Integer), 哈尼(String), null
DEBUG - <==    Updates: 2
2
DEBUG - Committing JDBC Connection [com.mysql.jdbc.JDBC4Connection@134593bf]

批量删除

UserDao.xml

   <!-- void deleteBatch(List<Long> ids);-->
    <delete id="deleteBatch" parameterType="list">
        <!-- DELETE from user where id in(2,3,4,5) -->
        <!-- collection="list":遍历的集合  index:索引  item:每次遍历得到的对象 open:以什么开始 close:以什么关闭 separator:分隔符 -->
        DELETE from user where id in
        <foreach collection="list"  item="id" open="(" close=")" separator=",">
            #{id}
        </foreach>
    </delete>

UserDao.java

   /**
     * 批量删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    int deleteBatch(List<Integer> id);

UserDaoTest.java

   /**
     * 批量删除
     * @throws IOException
     */
    @Test
    public void deleteBatch() throws IOException {
        UserDao userDao = openSession.getMapper(UserDao.class);
        List<Integer> list= new ArrayList<>();
        list.add(3);
        list.add(4);
        int res= userDao.deleteBatch(list);
        System.out.println(res);
        openSession.commit();
    }

日志

DEBUG - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
DEBUG - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - Opening JDBC Connection
DEBUG - Created connection 323326911.
DEBUG - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@134593bf]
DEBUG - ==>  Preparing: DELETE from user where id in ( ? , ? ) 
DEBUG - ==> Parameters: 3(Integer), 4(Integer)
DEBUG - <==    Updates: 2
2
DEBUG - Committing JDBC Connection [com.mysql.jdbc.JDBC4Connection@134593bf]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/197555.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!