Mybatis注解开发单表CRUD


mybatis注解开发和xml开发不可兼容,要么全部使用注解,要么全部使用xml,个人建议注解,简单。

当实体类属性名称和数据库表属性名称一致时:无需配置Results

实体类User

 package com.itheima.domain;
 ​
 import java.io.Serializable;
 import java.util.Date;
 import java.util.List;
 ​
 /**
  * @Author: lijiahao
  * @Description:
  * @Data: Create in 21:37 2020/2/22
  * @Modified By:
  */
 public class User implements Serializable {
     private Integer id;
     private String username;
     private Date birthday;
     private String sex;
     private String address;
 ​
     public Integer getId() {
         return id;
    }
 ​
     public void setId(Integer id) {
         this.id = id;
    }
 ​
     public String getUsername() {
         return username;
    }
 ​
     public void setUsername(String username) {
         this.username = username;
    }
 ​
     public Date getBirthday() {
         return birthday;
    }
 ​
     public void setBirthday(Date birthday) {
         this.birthday = birthday;
    }
 ​
     public String getSex() {
         return sex;
    }
 ​
     public void setSex(String sex) {
         this.sex = sex;
    }
 ​
     public String getAddress() {
         return address;
    }
 ​
     public void setAddress(String address) {
         this.address = address;
    }
 ​
     @Override
     public String toString() {
         return "User{" +
                 "id=" + id +
                 ", username='" + username + '\'' +
                 ", birthday=" + birthday +
                 ", sex='" + sex + '\'' +
                 ", address='" + address + '\'' +
                 '}';
    }
 }
 ​

接口IUserDao

 package com.itheima.dao;
 ​
 import com.itheima.domain.User;
 import org.apache.ibatis.annotations.Delete;
 import org.apache.ibatis.annotations.Insert;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 ​
 import java.beans.IntrospectionException;
 import java.util.List;
 ​
 /**
  * @Author: lijiahao
  * @Description: 用户的持久层接口
  * @Data: Create in 21:42 2020/2/22
  * @Modified By:
  */
 public interface IUserDao {
 ​
     //查询所有用户,同时获取到用户下所有账户的信息
     @Select("select * from user")
     List<User> findAll();
 ​
     @Insert("Insert into user (username,address,sex,birthday) values (#{username},#{address},#{sex},#{birthday})")
     void  saveUser(User user);
 ​
     @Update("update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id = #{id}")
     void updateUser(User user);
 ​
     @Delete("delete from user where id = #{id}")
     void deleteUser(Integer integer);
 ​
     @Select("select * from user where id = #{id}")
     User findById(Integer integer);
 ​
     @Select("Select * from user where username like #{username}")
  /*   @Select("Select * from user where username like '%${value}%'")*/
     List<User> findUserByName(String username);
 ​
     @Select("select count(*) from user")
     int findTotalUser();
 }
 ​

配置文件

主配置文件
 <?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">
 ​
 <!--mybatis的主配置文件-->
 <configuration>
 ​
     <properties resource="jdbcConfig.properties"/>
 ​
     <!--配置别名 类名就是别名,不区分大小写-->
     <typeAliases>
         <package name="com.itheima.domain" ></package>
     </typeAliases>
 ​
     <!--配置环境-->
     <environments default="mysql">
         <!--配置mysql的环境-->
         <environment id="mysql">
             <!--配置事务的类型-->
             <transactionManager type="JDBC"></transactionManager>
             <!--配置数据源(连接池)-->
             <dataSource type="POOLED">
                 <!--配置数据库的四个基本信息-->
                 <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>
 ​
     <!--指定dao接口所在位置-->
     <mappers>
         <package name="com.itheima.dao"></package>
     </mappers>
 </configuration>
连接池
 jdbc.driver=com.mysql.cj.jdbc.Driver
 jdbc.url=jdbc:mysql://localhost:3306/eesy?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
 jdbc.username=root
 jdbc.password=123456
日志
 ### 设置###
 log4j.rootLogger = debug,CONSOLE,LOGFILE
 ​
 log4j.logger.org.apache.axis.enterprise=FATAL,CONSOLE
 ​
 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
 log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
 log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
 ​
 ### 输出ERROR 级别以上的日志到=E://logs/error.log ###
 log4j.appender.LOGFILE = org.apache.log4j.FileAppender
 log4j.appender.LOGFILE.FILE = F://logs/error.log
 log4j.appender.LOGFILE.Append = true
 log4j.appender.LOGFILE.layout = org.apache.log4j.PatternLayout
 log4j.appender.LOGFILE.layout.ConversionPattern = %d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

测试类

 package com.itheima;
 ​
 import com.itheima.dao.IUserDao;
 import com.itheima.domain.User;
 import org.apache.ibatis.io.Resources;
 import org.apache.ibatis.session.SqlSession;
 import org.apache.ibatis.session.SqlSessionFactory;
 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 ​
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Date;
 import java.util.List;
 ​
 /**
  * @Author: lijiahao
  * @Description:
  * @Data: Create in 22:56 2020/2/22
  * @Modified By:
  */
 public class AnnotationCRUDTest {
     private InputStream in;
     private SqlSession sqlSession;
     private IUserDao iUserDao;
     private SqlSessionFactory sqlSessionFactory;
 ​
     @Before
     public void init() throws Exception {
         in = Resources.getResourceAsStream("SqlMapConfig.xml");
         sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
         sqlSession = sqlSessionFactory.openSession();
         iUserDao = sqlSession.getMapper(IUserDao.class);
    }
 ​
     @After
     public void destroy() throws IOException {
         sqlSession.commit();
         sqlSession.close();
         in.close();
    }
 ​
     @Test
     public void testSave(){
         User user = new User();
         user.setUsername("李家豪");
         user.setAddress("郑州市");
 ​
         iUserDao.saveUser(user);
    }
 ​
     @Test
     public void testUpdate(){
         User user = new User();
         user.setId(47);
         user.setUsername("李家豪");
         user.setAddress("郑州市");
         user.setSex("女");
         user.setBirthday(new Date());
 ​
         iUserDao.updateUser(user);
         System.out.println(user);
    }
 ​
     @Test
     public void testDelete(){
         iUserDao.deleteUser(47);
    }
 ​
     @Test
     public void testFindById(){
         User user = iUserDao.findById(57);
         System.out.println(user);
    }
 ​
     @Test
     public void testFindUserByName(){
         List<User> users = iUserDao.findUserByName("%王%");
         //List<User> users = iUserDao.findUserByName("王");
         for(User user : users)
         System.out.println(user);
    }
 ​
     @Test
     public void testFindTotal(){
         int count = iUserDao.findTotalUser();
         System.out.println(count);
    }
 }

当实体类属性名称和数据库表属性名称一致时:需配置Results

接口IUserDao

 package com.itheima.dao;
 ​
 import com.itheima.domain.User;
 import org.apache.ibatis.annotations.*;
 ​
 import java.beans.IntrospectionException;
 import java.util.List;
 ​
 /**
  * @Author: lijiahao
  * @Description: 用户的持久层接口
  * @Data: Create in 21:42 2020/2/22
  * @Modified By:
  */
 public interface IUserDao {
 ​
     //查询所有用户,同时获取到用户下所有账户的信息
     @Select("select * from user")
     //当实体类的属性和数据库的属性名称不一致时,需要配置对应关系,id为该Results的唯一标识
     @Results(id = "userMap", value={
             @Result(id=true,column = "id",property = "userId"),
             @Result(column = "username",property = "userName"),
             @Result(column = "sex",property = "userSex"),
             @Result(column = "address",property = "userAddress"),
             @Result(column = "birthday",property = "userBirthday"),
    })
     List<User> findAll();
 ​
     @Insert("Insert into user (username,address,sex,birthday) values (#{username},#{address},#{sex},#{birthday})")
     void  saveUser(User user);
 ​
     @Update("update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id = #{id}")
     void updateUser(User user);
 ​
     @Delete("delete from user where id = #{id}")
     void deleteUser(Integer integer);
 ​
     @Select("select * from user where id = #{id}")
     @ResultMap(value = {"userMap"})
     User findById(Integer integer);
 ​
     @Select("Select * from user where username like #{username}")
     @ResultMap(value = {"userMap"})
     List<User> findUserByName(String username);
 ​
 }
 ​

测试

 package com.itheima;
 ​
 import com.itheima.dao.IUserDao;
 import com.itheima.domain.User;
 import org.apache.ibatis.io.Resources;
 import org.apache.ibatis.session.SqlSession;
 import org.apache.ibatis.session.SqlSessionFactory;
 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 ​
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Date;
 import java.util.List;
 ​
 /**
  * @Author: lijiahao
  * @Description:
  * @Data: Create in 22:56 2020/2/22
  * @Modified By:
  */
 public class AnnotationCRUDTest {
     private InputStream in;
     private SqlSession sqlSession;
     private IUserDao iUserDao;
     private SqlSessionFactory sqlSessionFactory;
 ​
     @Before
     public void init() throws Exception {
         in = Resources.getResourceAsStream("SqlMapConfig.xml");
         sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
         sqlSession = sqlSessionFactory.openSession();
         iUserDao = sqlSession.getMapper(IUserDao.class);
    }
 ​
     @After
     public void destroy() throws IOException {
         sqlSession.commit();
         sqlSession.close();
         in.close();
    }
 ​
     @Test
     public void testFindAll(){
         List<User> users = iUserDao.findAll();
         for(User user : users)
             System.out.println(user);
    }
 ​
     @Test
     public void testFindById(){
         User user = iUserDao.findById(57);
         System.out.println(user);
    }
 ​
     @Test
     public void testFindUserByName(){
         List<User> users = iUserDao.findUserByName("%王%");
         //List<User> users = iUserDao.findUserByName("王");
         for(User user : users)
         System.out.println(user);
    }
 ​
 }

Mybatis注解开发单表CRUD的更多相关文章

  1. Mybatis高级:Mybatis注解开发单表操作,Mybatis注解开发多表操作,构建sql语句,综合案例学生管理系统使用接口注解方式优化

    知识点梳理 课堂讲义 一.Mybatis注解开发单表操作 *** 1.1 MyBatis的常用注解 之前我们在Mapper映射文件中编写的sql语句已经各种配置,其实是比较麻烦的 而这几年来注解开发越 ...

  2. EJB_开发单表映射的实体bean

    开发单表映射的实体bean 实体bean 它属于java持久化规范(JPA)里的技术,实体bean通过元数据在Javabean和数据库表之间建立起映射关系,然后Java程序员就可以随心所欲的使用面向对 ...

  3. Mybatis注解开发多表一对一,一对多

    Mybatis注解开发多表一对一,一对多 一对一 示例:帐户和用户的对应关系为,多个帐户对应一个用户,在实际开发中,查询一个帐户并同时查询该账户所属的用户信息,即立即加载且在mybatis中表现为一对 ...

  4. Mybatis注解开发之@CacheNamespace:实现注解二级缓存的使用

    MyBatis二级缓存使用: 官方建议在service使用缓存,但是你也可以直接在mapper层缓存,这里的二级缓存就是直接在Mapper层进行缓存操作 Mybatis的二级缓存实现也十分简单,只要在 ...

  5. MyBatis从入门到精通(第3章):MyBatis注解方式的基本使用

    MyBatis 注解方式就是将 SQL 语句直接写在DAO层的接口上. 在黑马录制的2018年双元视频课:\08 SSM整合案例[企业权限管理系统]\07.订单操作  有使用MyBatis注解进行多表 ...

  6. Mybatis基于注解实现多表查询

    对应的四种数据库表关系中存在四种关系:一对多,多对应,一对一,多对多.在前文中已经实现了xml配置方式实现表关系的查询,本文记录一下Mybatis怎么通过注解实现多表的查询,算是一个知识的补充. 同样 ...

  7. MyBatis注解Annotation介绍及Demo

     MyBatis注解Annotation介绍及Demo 2014-04-21 17:09:55 标签:Mybatis Annotation 注解 ResultMap SqlBuilder 原创作品,允 ...

  8. Mybatis注解开发

    mybatis 的常用注解: @Insert:实现新增 @Update:实现更新 @Delete:实现删除 @Select:实现查询 @Result:实现结果集封装 @Results:可以与 @Res ...

  9. SpringBoot+Mybatis 自动创建数据表(适用mysql)

    Mybatis用了快两年了,在我手上的发展史大概是这样的 第一个阶段 利用Mybatis-Generator自动生成实体类.DAO接口和Mapping映射文件.那时候觉得这个特别好用,大概的过程是这样 ...

随机推荐

  1. spark-env.sh增加HADOOP_CONF_DIR使得spark运行文件是hdfs文件

    spark-env.sh增加HADOOP_CONF_DIR使得spark读写的是hdfs文件 刚装了spark,运行wordcount程序,local方式,执行的spark-submit,读和写的文件 ...

  2. tf.app.run()的作用

    tf.app.run() 如果你的代码中的入口函数不叫main(),而是一个其他名字的函数,如test(),则你应该这样写入口tf.app.run(test) 如果你的代码中的入口函数叫main(), ...

  3. Python3中reduce和lambda的用法

    reduce() 函数将一个数据集合(iterable[, initializer])可以看出是包含了初始化数据的,且初始化数据位列第1位,即集合中的第1个元素)中的所有数据进行下列操作:先对集合中的 ...

  4. Spring AOP 中 advice 的四种类型 before after throwing advice around

    spring  AOP(Aspect-oriented programming) 是用于切面编程,简单的来说:AOP相当于一个拦截器,去拦截一些处理,例如:当一个方法执行的时候,Spring 能够拦截 ...

  5. uniGUI之上传文件UniFileUploadButton(26)

    TUniFileUploadButton主要属性: Filter: 文件类型过滤,有图片image/*   audio/* video/*三种过滤 MaxAllowedSize: 设置文件最大上传尺寸 ...

  6. Git三招

    一.Git提交指令 git init git第一次使用在当前文件夹初始化一个git仓库,第二次不需要 git add . 把当前文件夹所有文件添加到缓存区中. 可以选特定的文件夹或文件.将后面的.改变 ...

  7. log4j2 异步多线程打印日志

    log4j2 异步多线程打印日志 Maven依赖 <dependency> <groupId>org.apache.logging.log4j</groupId> ...

  8. 【转】issue management in your test project

    What is Issue Management? Issue Management is the process to make others aware of the problem and th ...

  9. Java 代码中如何调用 第三方Api

    在代码中调用第三方API 获取数据 package com.example.demo.utils; import com.alibaba.fastjson.JSONObject; import lom ...

  10. Linux命令:vi | vim命令

    vim - vi 增强版.文本编辑器 格式:vim [options] [file ..] 说明:如果file存在,文件被打开并显示内容,如果文件不存在,当编辑后第一次存盘时创建它 [options] ...