• Mybatis入门笔记(12)——基于注解方式的代理Dao的CRUD操作


    创建步骤:

    1. 创建maven工程,什么都不选就ok,并导入坐标;

      <packaging>jar</packaging>
      <dependencies>
          <dependency>
              <groupId>org.mybatis</groupId>
              <artifactId>mybatis</artifactId>
              <version>3.4.5</version>
          </dependency>
          <dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <version>5.1.6</version>
          </dependency>
          <dependency>
              <groupId>log4j</groupId>
              <artifactId>log4j</artifactId>
              <version>1.2.12</version>
          </dependency>
      
          <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>4.10</version>
          </dependency>
      </dependencies>
      
    2. 编写User实体类,java目录下创建com.ben.domain包,创建User实体类

      public class User implements Serializable {
          private int id;
          private String username;// 用户姓名
          private String sex;// 性别
          private Date birthday;// 生日
          private String address;// 地址
      
          public int getId() {
              return id;
          }
      
          public void setId(int id) {
              this.id = id;
          }
      
          public String getUsername() {
              return username;
          }
      
          public void setUsername(String username) {
              this.username = username;
          }
      
          public String getSex() {
              return sex;
          }
      
          public void setSex(String sex) {
              this.sex = sex;
          }
      
          public Date getBirthday() {
              return birthday;
          }
      
          public void setBirthday(Date birthday) {
              this.birthday = birthday;
          }
      
          public String getAddress() {
              return address;
          }
      
          public void setAddress(String address) {
              this.address = address;
          }
      
          @Override
          public String toString() {
              return "User [id=" + id + ", username=" + username + ", sex=" + sex
                      + ", birthday=" + birthday + ", address=" + address + "]";
          }
      }
      
    3. 使用注解方式编写持久层接口

      package com.ben.dao;
      
      import com.ben.domain.User;
      import org.apache.ibatis.annotations.*;
      
      import java.util.List;
      
      /**
       * @ClassName: IUserDao
       * @author: benjamin
       * @createTime: 2019/07/19/21:50
       */
      public interface IUserDao {
      
          /**
          * @Description: 增加用户
          * @Param: User user:类对象
          * @return:  int
          * @Author: benjamin
          * @Date: 2019/7/19
          */
          @Insert("insert into user(username,sex,birthday,address) values (#{username},#{sex},#{birthday},#{address})")
          int insertUser(User user);
      
          /**
          * @Description: 删除用户
          * @Param:
          * @return:
          * @Author: benjamin
          * @Date: 2019/7/19
          */
          @Delete("delete from user where id=#{id}")
          int deleteUser(Integer id);
      
          /**
          * @Description: 修改用户
          * @Param:
          * @return:
          * @Author: benjamin
          * @Date: 2019/7/19
          */
          @Update("update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id =#{id}")
          int updateUser(User user);
      
          /**
          * @Description: 查询所有用户
          * @Param:
          * @return:
          * @Author: benjamin
          * @Date: 2019/7/19
          */
          @Select("select * from user")
          @Results(id="userMap",
                  value = {
                          @Result(id=true,column = "id",property = "id"),
                          @Result(column = "username", property = "username"),
                          @Result(column = "sex", property = "sex"),
                          @Result(column = "address", property = "address"),
                          @Result(column = "birthday", property = "birthday")
                  })
          List<User> findAll();
      
          /**
          * @Description: 根据用户ID查询用户
          * @Param:
          * @return:
          * @Author: benjamin
          * @Date: 2019/7/19
          */
          @Select("select * from user where id = #{id}")
          User findUserById(Integer id);
      
          /**
          * @Description: 根据用户名模糊查询用户
          * @Param:
          * @return:
          * @Author: benjamin
          * @Date: 2019/7/19
          */
      //    @Select("select * from user where username like #{username}")
          @Select("select * from user where username like '%${value}%'")
          List<User> findUserByUserName(String username);
          
          /** 
          * @Description: 查询用户的总数
          * @Param: 
          * @return:  
          * @Author: benjamin
          * @Date: 2019/7/19 
          */
          @Select("select count(*) from user")
          int findTotalUser();
      }
      
    4. 在resources文件夹中,创建Mybatis的主配置文件SqlMapConfig.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>
          <!---->
          <properties resource="jdbcConfig.properties"></properties>
          <!--配置别名-->
          <typeAliases>
              <package name="com.ben.domain"/>
          </typeAliases>
      
          <!-- 配置环境-->
          <environments default="mysql">
              <!--配置mysql的环境-->
              <environment id="mysql">
                  <!--配置事务的类型-->
                  <transactionManager type="JDBC"></transactionManager>
                  <!--配置连接池-->
                  <dataSource type="POOLED">
                      <!--配置连接数据库的4个基本信息-->
                      <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>
              <package name="com.ben.dao"/>
          </mappers>
      </configuration>
      
    5. 在resources文件夹中导入log4j.properties文件

    6. 编写测试类com.ben.test.AnnotationTest,6步;

      1.读取配置文件
      in = Resources.getResourceAsStream("SqlMapConfig.xml");
      2.创建SqlSessionFactory工厂
      SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
      3.创建SqlSession工厂对象
      SqlSessionFactory factory = builder.build(in);
      4.使用工厂生产SqlSession对象
      session = factory.openSession();
      5.创建Dao接口的代理对象
      userdao = session.getMapper(IUserDao.class);
      6.执行操作:增删改查等操作
      7.释放资源
      session.commit();
      session.close();
      in.close();
      

      测试类编写:

      public class AnnotationTest {
          private InputStream in;
          private SqlSession sqlSession;
          private IUserDao userDao;
      
          @Before//用于在测试方法执行之前执行
          public void init()throws Exception{
              //1.读取配置文件,生成字节输入流
              in = Resources.getResourceAsStream("SqlMapConfig.xml");
              //2.获取SqlSessionFactory
              SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
              //3.获取SqlSession对象
              sqlSession = factory.openSession(true);
              //4.获取dao的代理对象
              userDao = sqlSession.getMapper(IUserDao.class);
          }
      
          @After//用于在测试方法执行之后执行
          public void destroy()throws Exception{
              //提交事务
              sqlSession.commit();
              //6.释放资源
              sqlSession.close();
              in.close();
          }
      
          //增加用户
          @Test
          public void testSaveUser(){
              User user = new User();
              user.setUsername("笑笑");
              user.setSex("2");
              user.setBirthday(new Date());
              user.setAddress("西安市雁塔区");
              int i = userDao.insertUser(user);
              System.out.println("插入ID:"+user.getId());
          }
      
          //删除用户
          @Test
          public void testDeleteUser(){
              int i = userDao.deleteUser(40);
              System.out.println(i);
          }
      
          //修改用户
          @Test
          public void testUpdateUser(){
              User user = new User();
              user.setUsername("笑笑");
              user.setBirthday(new Date());
              user.setAddress("西安市雁塔区");
              user.setId(41);
              userDao.updateUser(user);
          }
      
          //测试查询所有
          @Test
          public void testFindAll(){
              List<User> users = userDao.findAll();
              for(User user : users){
                  System.out.println(user);
              }
          }
          //根据用户ID查找用户
          @Test
          public void testFindUserById(){
              User userById = userDao.findUserById(41);
              System.out.println(userById);
          }
      
          //根据用户名模糊查找用户
          @Test
          public void testFindUserByUserName(){
      //        List<User> list = userDao.findUserByUserName("%王%"); //#{}
              List<User> list = userDao.findUserByUserName("王"); //字符串拼接
              for(User user:list){
                  System.out.println(user);
              }
          }
      
          //查找用户的总数
          @Test
          public void testTotalCount(){
              int totalUser = userDao.findTotalUser();
              System.out.println(totalUser);
          }
      }
      
  • 相关阅读:
    123457123457#0#-----com.threeapp.renzhepaoku01----儿童跑酷游戏(忍者版)
    123456123456#0#-----com.threeapp.xiongMaoPaoPao01----熊猫跑酷01
    123456123456#0#-----com.threeapp.JiQiRenDaZhan01----机器人大战恐龙
    HashMap的工作原理
    Java 虚拟机
    分布式之缓存系统
    分库分表之后,id 主键如何处理?
    如何设计可以动态扩容缩容的分库分表方案?
    为什么要分库分表?用过哪些分库分表中间件?不同的分库分表中间件都有什么优点和缺点?
    如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题?
  • 原文地址:https://www.cnblogs.com/benjieqiang/p/11217872.html
Copyright © 2020-2023  润新知