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. Build ear package

    build 单个service ear TestService -> TestService 修改file Location地址(放在你指定的位置) 点击Build Archive succes ...

  2. linux和windows系统的区别

    在21世纪的今天,互联网可以说是当代发展最为迅速的行业,举个很简单的例子,现在的我们不论什么年龄阶层,几乎人手都有一部手机,上面的某博,某音,末手等软件,更是受到多数人的热爱,并且人们不仅仅用其来消遣 ...

  3. 【译】索引进阶(十七): SQL SERVER索引最佳实践

    [译注:此文为翻译,由于本人水平所限,疏漏在所难免,欢迎探讨指正] 原文链接:传送门. 在本章我们给出一些建议:贯穿本系列我们提取出了十四条基本指南,这些基本的指南将会帮助你为你的数据库创建最佳的索引 ...

  4. 「CF1313C Skyscrapers」

    题目大意 给出一个长度为 \(N\) 的序列 \(a\) 需要构造出一个长度为 \(N\) 的序列 \(h\) 使得 \(\forall i \in \{1,2,\ldots ,N\} h_i \le ...

  5. FreeSWITCH调用第三方TTS 使用tts_commandline

    FreeSWITCH 支持调用第三方TTS命令,本身已经搭好了框架,只需要配置即可用. 下面写一下步骤,以免忘记,也希望给你带来帮助. 第一步:编译模块mod_tts_commandline,并加载. ...

  6. DC: 8-Write-up

    下载地址:点我 哔哩哔哩:点我 信息收集 确定网段,找到虚拟机的IP,扫端口和服务. ➜ ~ nmap -sn 192.168.116.1/24 Starting Nmap 7.80 ( https: ...

  7. char、pchar、string互相转换

    1.string转换成pchar 可以使用pchar进行强制类型转换,也可以使用StrPCopy函数 var s:string; p,p1:PChar; begin s:='Hello Delphi' ...

  8. 用Jackson进行Json序列化时的常用注解

    Jackson时spring boot默认使用的json格式化的包,它的几个常用注解: @JsonIgnore 用在属性上面,在序列化和反序列化时都自动忽略掉该属性 @JsonProperty(&qu ...

  9. Linux命令:yum命令

    YUM: Yellowdog Update Modifier,rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具 一.yum命令用法 yum repolist ...

  10. springboot 不停服动态更新定时任务时间(转)

    转 https://blog.csdn.net/u012129558/article/details/80834303 Spring框架自3.0版本起,自带了任务调度功能,好比是一个轻量级的Quart ...