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);
        }
    }
    
posted @ 2019-07-20 15:25  伊万夫斯基  阅读(281)  评论(0编辑  收藏  举报