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. [运维] 如何将 Linux 上的 nginx 变成 静态资源服务器 (二)

    环境 虚拟机上运行 Linux centos 7 64 已经安装 nginx-1.16.1.tar.gz  具体的安装过程可以参考 https://www.cnblogs.com/unityworld ...

  2. svnserve: Can’t bind server socket: Address already in use报错解决办法

    最近在学习自己搭建SVN服务,意外的报错 svnserve: Can’t bind server socket: Address already in use 于是google了下,原来是 已经启动了 ...

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

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

  4. Swift3.0-基础知识

    本文对Swift做一个从OC的角度的基础知识简单概要. Swift OC 说明 let.var const 在OC中不用const声明的常量,都认为是变量 Float.Double CGFloat   ...

  5. ArcMap中对失量数据将具有相同的字段的元素进行合并

    ArcMap=>工具栏=>Geoprocessing=>Dissolve,由于是将多个元素进行合并,所以还涉及到合并后的元素的字段保留以及字段取值的问题,在该工具中还可以自定义保存的 ...

  6. js里用 toLocaleString 实现给数字加三位一逗号间隔(有无小数点都适用)

    <input type="hidden" id="totalLandArea" value="<%-info.totalLandArea% ...

  7. AJAX请求返回JSON数据动态生成html

    1:DeliveryPersonVO对象 package com.funcanteen.business.entity.delivery.vo; import java.util.List; impo ...

  8. [swscaler @ ...] deprecated pixel format used, make sure you did set range correctly

    我自己在使用如下函数进行转换时报的错 int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[], const int sr ...

  9. angular 自定义服务封装自定义http请求

    在angular中将http请求,放置在一起封装成服务,可减少代码重复,方便使用 var ngpohttprest = angular.module('ngpohttprest', []); ngpo ...

  10. 测试人员如何使用Git

    测试人员如何使用Git? 首先Git的安装,这里不多做阐述,直接去Git官方网站下载后并傻瓜式安装即可. 如何判定已安装好Git呢?  ------------- 随便打开一个目录,鼠标右键点击可看到 ...