一、项目构建

1、Java项目目录结构

2、在domain包下创建User实体类

  1. package sun.domain;
  2.  
  3. import java.io.Serializable;
  4. import java.util.Date;
  5.  
  6. /**
  7. * @Classname User
  8. * @Description TODO
  9. * @Date 2020/9/13 14:07
  10. * @Created by Administrator
  11. */
  12. public class User implements Serializable {
  13. private Integer id;
  14. private String username;
  15. private String address;
  16. private String sex;
  17. private Date birthday;
  18.  
  19. public Integer getId() {
  20. return id;
  21. }
  22.  
  23. public void setId(Integer id) {
  24. this.id = id;
  25. }
  26.  
  27. public String getUsername() {
  28. return username;
  29. }
  30.  
  31. public void setUsername(String username) {
  32. this.username = username;
  33. }
  34.  
  35. public String getAddress() {
  36. return address;
  37. }
  38.  
  39. public void setAddress(String address) {
  40. this.address = address;
  41. }
  42.  
  43. public String getSex() {
  44. return sex;
  45. }
  46.  
  47. public void setSex(String sex) {
  48. this.sex = sex;
  49. }
  50.  
  51. public Date getBirthday() {
  52. return birthday;
  53. }
  54.  
  55. public void setBirthday(Date birthday) {
  56. this.birthday = birthday;
  57. }
  58.  
  59. @Override
  60. public String toString() {
  61. return "User{" +
  62. "id=" + id +
  63. ", username='" + username + '\'' +
  64. ", address='" + address + '\'' +
  65. ", sex='" + sex + '\'' +
  66. ", birthday=" + birthday +
  67. '}';
  68. }
  69. }

User实体类

3、在dao包下创建UserDao接口

  1. package sun.dao;
  2.  
  3. import org.apache.ibatis.annotations.Delete;
  4. import org.apache.ibatis.annotations.Insert;
  5. import org.apache.ibatis.annotations.Select;
  6. import org.apache.ibatis.annotations.Update;
  7. import sun.domain.User;
  8.  
  9. import javax.jws.soap.SOAPBinding;
  10. import java.util.List;
  11.  
  12. /**
  13. * @Classname UserDao
  14. * @Description TODO
  15. * @Date 2020/9/13 14:09
  16. * @Created by Administrator
  17. */
  18. public interface UserDao {
  19. /**
  20. * 查询所有用户
  21. */
  22. @Select("select * from user")
  23. List<User> findAll();
  24.  
  25. /**
  26. * 根据id查user
  27. */
  28. @Select("select * from user where id=#{id}")
  29. User findUserById(Integer id);
  30.  
  31. /**
  32. * 模糊查询
  33. */
  34. @Select("select * from user where username like #{name}")
  35. List<User> findLike(String name);
  36.  
  37. /**
  38. * 查询记录总数
  39. */
  40. @Select("select count(1) from user")
  41. int findTotal();
  42.  
  43. /**
  44. * 添加新用户
  45. */
  46. @Insert("insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})")
  47. void saveUser(User user);
  48.  
  49. /**
  50. * 更新用户信息
  51. */
  52. @Update("update user set username=#{username},address=#{address},birthday=#{birthday},sex=#{sex} where id=#{id}")
  53. void updateUser(User user);
  54.  
  55. /**
  56. * 删除用户
  57. */
  58. @Delete("delete from user where id=#{id}")
  59. void deleteUser(Integer id);
  60. }

UserDao接口

4、在resource目录下创建SqlMapConfig.xml主配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5.  
  6. <configuration>
  7. <properties resource="jdbcConfig.properties"></properties>
  8.  
  9. <typeAliases>
  10. <package name="sun.domain"></package>
  11. </typeAliases>
  12. <!--配置环境-->
  13. <environments default="mysql">
  14. <!--配置mysql环境-->
  15. <environment id="mysql">
  16. <!--配置事务类型-->
  17. <transactionManager type="JDBC"></transactionManager>
  18. <!--配置数据库连接池-->
  19. <dataSource type="POOLED">
  20. <!--配置连接数据库基本信息-->
  21. <property name="driver" value="${jdbc.driver}"></property>
  22. <property name="url" value="${jdbc.url}"></property>
  23. <property name="username" value="${jdbc.username}"></property>
  24. <property name="password" value="${jdbc.password}"></property>
  25. </dataSource>
  26. </environment>
  27. </environments>
  28.  
  29. <mappers>
  30. <package name="sun.dao"></package>
  31. </mappers>
  32. </configuration>

SqlMapConfig.xml

5、创建测试类

  1. package sun.test;
  2.  
  3. import org.apache.ibatis.annotations.Select;
  4. import org.apache.ibatis.io.Resources;
  5. import org.apache.ibatis.session.SqlSession;
  6. import org.apache.ibatis.session.SqlSessionFactory;
  7. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  8. import org.junit.After;
  9. import org.junit.Before;
  10. import org.junit.Test;
  11. import sun.dao.UserDao;
  12. import sun.domain.User;
  13.  
  14. import java.io.InputStream;
  15. import java.util.List;
  16.  
  17. /**
  18. * @Classname MybatisTest
  19. * @Description TODO
  20. * @Date 2020/9/13 14:57
  21. * @Created by Administrator
  22. */
  23. public class MybatisTest {
  24. InputStream in;
  25. SqlSessionFactoryBuilder builder;
  26. SqlSessionFactory sessionFactory;
  27. SqlSession sqlSession;
  28. UserDao userDao;
  29.  
  30. @Before
  31. public void init() throws Exception{
  32. in = Resources.getResourceAsStream("SqlMapConfig.xml");
  33. builder = new SqlSessionFactoryBuilder();
  34. sessionFactory = builder.build(in);
  35. sqlSession = sessionFactory.openSession();
  36. userDao = sqlSession.getMapper(UserDao.class);
  37. }
  38. @After
  39. public void destory() throws Exception{
  40. sqlSession.commit();
  41. sqlSession.close();
  42. in.close();
  43. }
  44.  
  45. @Test
  46. public void findAllTest() throws Exception{
  47. List<User> users = userDao.findAll();
  48. for (User user : users) {
  49. System.out.println(user);
  50. }
  51. }
  52.  
  53. @Test
  54. public void findOneTest() throws Exception{
  55. User user = userDao.findUserById(48);
  56. System.out.println(user);
  57. }
  58.  
  59. @Test
  60. public void findLikeTest() throws Exception{
  61. List<User> users = userDao.findLike("%王%");
  62. for (User user : users) {
  63. System.out.println(user);
  64. }
  65. }
  66.  
  67. @Test
  68. public void findTotalTest() throws Exception{
  69. int total = userDao.findTotal();
  70. System.out.println(total);
  71. }
  72.  
  73. @Test
  74. public void saveUserTest() throws Exception{
  75. User user = new User();
  76. user.setUsername("kelvin");
  77. user.setAddress("安徽省宿州市");
  78. userDao.saveUser(user);
  79. }
  80.  
  81. @Test
  82. public void updateTest() throws Exception{
  83. User user = new User();
  84. user.setId(49);
  85. user.setUsername("kelvin");
  86. user.setAddress("安徽省宿州市");
  87. user.setSex("男");
  88. userDao.updateUser(user);
  89. }
  90.  
  91. @Test
  92. public void deleteTest(){
  93. userDao.deleteUser(50);
  94. }
  95. }

测试类

二、构建实体类属性和数据库表字段对应关系

在接口方法中使用@Result来构建实体类属性和数据库表字段之间的关系,后面方法如果想要使用该关系可以使用@ResultMap进行使用。

  1. package sun.dao;
  2.  
  3. import org.apache.ibatis.annotations.*;
  4. import sun.domain.User;
  5.  
  6. import javax.jws.soap.SOAPBinding;
  7. import java.util.List;
  8.  
  9. /**
  10. * @Classname UserDao
  11. * @Description TODO
  12. * @Date 2020/9/13 14:09
  13. * @Created by Administrator
  14. */
  15. public interface UserDao {
  16. /**
  17. * 查询所有用户
  18. */
  19. @Select("select * from user")
  20. @Results(id="userMap",value={
  21. @Result(id=true,property = "user_id",column = "id"),
  22. @Result(property = "user_name",column = "username"),
  23. @Result(property = "user_sex",column = "sex"),
  24. @Result(property = "user_address",column = "address"),
  25. @Result(property = "user_birthday",column = "birthday"),
  26. })
  27. List<User> findAll();
  28.  
  29. /**
  30. * 根据id查user
  31. */
  32. @Select("select * from user where id=#{id}")
  33. // @ResultMap(value = {"userMap"}) // 正规写法
  34. @ResultMap("userMap") // 只有一个参数 简写
  35. User findUserById(Integer id);
  36.  
  37. /**
  38. * 模糊查询
  39. */
  40. @Select("select * from user where username like #{name}")
  41. @ResultMap(value = {"userMap"})
  42. List<User> findLike(String name);
  43.  
  44. }

UserDao接口

三、一对一&一对多查询

  1. 创建一对一,一对多查询主要使用了@Result中的one属性和many属性。配置onemany中的selectfetchType即可。

Java项目目录结构

1、一对一

1)在domain下创建User和Account实体类

User类:

  1. package sun.domain;
  2.  
  3. import java.io.Serializable;
  4. import java.util.Date;
  5. import java.util.List;
  6.  
  7. /**
  8. * @Classname User
  9. * @Description TODO
  10. * @Date 2020/9/13 14:07
  11. * @Created by Administrator
  12. */
  13. public class User implements Serializable {
  14. private Integer user_id;
  15. private String user_name;
  16. private String user_address;
  17. private String user_sex;
  18. private Date user_birthday;
  19. private List<Account> accountList;
  20.  
  21. public List<Account> getAccountList() {
  22. return accountList;
  23. }
  24.  
  25. public void setAccountList(List<Account> accountList) {
  26. this.accountList = accountList;
  27. }
  28.  
  29. public Integer getUser_id() {
  30. return user_id;
  31. }
  32.  
  33. public void setUser_id(Integer user_id) {
  34. this.user_id = user_id;
  35. }
  36.  
  37. public String getUser_name() {
  38. return user_name;
  39. }
  40.  
  41. public void setUser_name(String user_name) {
  42. this.user_name = user_name;
  43. }
  44.  
  45. public String getUser_address() {
  46. return user_address;
  47. }
  48.  
  49. public void setUser_address(String user_address) {
  50. this.user_address = user_address;
  51. }
  52.  
  53. public String getUser_sex() {
  54. return user_sex;
  55. }
  56.  
  57. public void setUser_sex(String user_sex) {
  58. this.user_sex = user_sex;
  59. }
  60.  
  61. public Date getUser_birthday() {
  62. return user_birthday;
  63. }
  64.  
  65. public void setUser_birthday(Date user_birthday) {
  66. this.user_birthday = user_birthday;
  67. }
  68.  
  69. @Override
  70. public String toString() {
  71. return "User{" +
  72. "user_id=" + user_id +
  73. ", user_name='" + user_name + '\'' +
  74. ", user_address='" + user_address + '\'' +
  75. ", user_sex='" + user_sex + '\'' +
  76. ", user_birthday=" + user_birthday +
  77. '}';
  78. }
  79. }

User

Account类:

  1. package sun.domain;
  2.  
  3. import java.io.Serializable;
  4.  
  5. /**
  6. * @Classname Account
  7. * @Description TODO
  8. * @Date 2020/9/14 8:50
  9. * @Created by Administrator
  10. */
  11. public class Account implements Serializable {
  12. private Integer id;
  13. private Integer uid;
  14. private Double money;
  15. private User user;
  16.  
  17. public User getUser() {
  18. return user;
  19. }
  20.  
  21. public void setUser(User user) {
  22. this.user = user;
  23. }
  24.  
  25. public Integer getId() {
  26. return id;
  27. }
  28.  
  29. public void setId(Integer id) {
  30. this.id = id;
  31. }
  32.  
  33. public Integer getUid() {
  34. return uid;
  35. }
  36.  
  37. public void setUid(Integer uid) {
  38. this.uid = uid;
  39. }
  40.  
  41. public Double getMoney() {
  42. return money;
  43. }
  44.  
  45. public void setMoney(Double money) {
  46. this.money = money;
  47. }
  48.  
  49. @Override
  50. public String toString() {
  51. return "Account{" +
  52. "id=" + id +
  53. ", uid=" + uid +
  54. ", money=" + money +
  55. '}';
  56. }
  57. }

Account

2)在dao包下创建UserDao接口和AccountDao接口

UserDao接口:

  1. package sun.dao;
  2.  
  3. import org.apache.ibatis.annotations.*;
  4. import org.apache.ibatis.mapping.FetchType;
  5. import sun.domain.User;
  6.  
  7. import javax.jws.soap.SOAPBinding;
  8. import java.util.List;
  9.  
  10. /**
  11. * @Classname UserDao
  12. * @Description TODO
  13. * @Date 2020/9/13 14:09
  14. * @Created by Administrator
  15. */
  16. public interface UserDao {
  17. /**
  18. * 查询所有用户
  19. */
  20. @Select("select * from user")
  21. @Results(id="userMap",value={
  22. @Result(id=true,property = "user_id",column = "id"),
  23. @Result(property = "user_name",column = "username"),
  24. @Result(property = "user_sex",column = "sex"),
  25. @Result(property = "user_address",column = "address"),
  26. @Result(property = "user_birthday",column = "birthday"),
  27. @Result(property = "accountList",column = "id",
  28. many = @Many(select = "sun.dao.AccountDao.findAccountById",
  29. fetchType = FetchType.LAZY))
  30. })
  31. List<User> findAll();
  32.  
  33. /**
  34. * 根据id查user
  35. */
  36. @Select("select * from user where id=#{id}")
  37. // @ResultMap(value = {"userMap"}) // 正规写法
  38. @ResultMap("userMap") // 只有一个参数 简写
  39. User findUserById(Integer id);
  40.  
  41. }

UserDao接口

Account接口:

  1. package sun.dao;
  2.  
  3. import org.apache.ibatis.annotations.One;
  4. import org.apache.ibatis.annotations.Result;
  5. import org.apache.ibatis.annotations.Results;
  6. import org.apache.ibatis.annotations.Select;
  7. import org.apache.ibatis.mapping.FetchType;
  8. import sun.domain.Account;
  9.  
  10. import java.util.List;
  11.  
  12. /**
  13. * @Classname AccountDao
  14. * @Description TODO
  15. * @Date 2020/9/14 8:52
  16. * @Created by Administrator
  17. */
  18. public interface AccountDao {
  19. /**
  20. * 查询所有数据
  21. */
  22. @Select("select * from account")
  23. //配置多对一(一对一)查询
  24. @Results(id = "accountMap",value = {
  25. @Result(id = true,property = "id",column = "id"),
  26. @Result(property = "uid",column = "uid"),
  27. @Result(property = "money",column = "money"),
  28. @Result(property = "user",column = "uid",one = @One(select = "sun.dao.UserDao.findUserById",fetchType= FetchType.EAGER))
  29. })
  30. List<Account> findAll();
  31.  
  32. /**
  33. * 根据id查user
  34. */
  35. @Select("select * from account where uid=#{id}")
  36. Account findAccountById(Integer id);
  37.  
  38. }

AccountDao接口

3)创建主配置文件

4)测试

  1. package sun.test;
  2.  
  3. import org.apache.ibatis.io.Resources;
  4. import org.apache.ibatis.session.SqlSession;
  5. import org.apache.ibatis.session.SqlSessionFactory;
  6. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  7. import org.junit.After;
  8. import org.junit.Before;
  9. import org.junit.Test;
  10. import sun.dao.AccountDao;
  11. import sun.domain.Account;
  12. import sun.domain.User;
  13.  
  14. import java.io.InputStream;
  15. import java.util.List;
  16.  
  17. /**
  18. * @Classname MybatisTest
  19. * @Description TODO
  20. * @Date 2020/9/13 14:57
  21. * @Created by Administrator
  22. */
  23. public class MybatisTest2 {
  24. InputStream in;
  25. SqlSessionFactoryBuilder builder;
  26. SqlSessionFactory sessionFactory;
  27. SqlSession sqlSession;
  28. AccountDao accountDao;
  29.  
  30. @Before
  31. public void init() throws Exception{
  32. in = Resources.getResourceAsStream("SqlMapConfig.xml");
  33. builder = new SqlSessionFactoryBuilder();
  34. sessionFactory = builder.build(in);
  35. sqlSession = sessionFactory.openSession();
  36. accountDao = sqlSession.getMapper(AccountDao.class);
  37. }
  38. @After
  39. public void destory() throws Exception{
  40. sqlSession.commit();
  41. sqlSession.close();
  42. in.close();
  43. }
  44. @Test
  45. public void findAll(){
  46. List<Account> all = accountDao.findAll();
  47. for (Account account : all) {
  48. System.out.println(account);
  49. System.out.println(account.getUser());
  50. }
  51. }
  52. }

2、一对多

1)同上

2)同上

3)同上

4)测试类

  1. package sun.test;
  2.  
  3. import org.apache.ibatis.io.Resources;
  4. import org.apache.ibatis.session.SqlSession;
  5. import org.apache.ibatis.session.SqlSessionFactory;
  6. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  7. import org.junit.After;
  8. import org.junit.Before;
  9. import org.junit.Test;
  10. import sun.dao.UserDao;
  11. import sun.domain.User;
  12.  
  13. import java.io.InputStream;
  14. import java.util.List;
  15.  
  16. /**
  17. * @Classname MybatisTest
  18. * @Description TODO
  19. * @Date 2020/9/13 14:57
  20. * @Created by Administrator
  21. */
  22. public class MybatisTest {
  23. InputStream in;
  24. SqlSessionFactoryBuilder builder;
  25. SqlSessionFactory sessionFactory;
  26. SqlSession sqlSession;
  27. UserDao userDao;
  28.  
  29. @Before
  30. public void init() throws Exception {
  31. in = Resources.getResourceAsStream("SqlMapConfig.xml");
  32. builder = new SqlSessionFactoryBuilder();
  33. sessionFactory = builder.build(in);
  34. sqlSession = sessionFactory.openSession();
  35. userDao = sqlSession.getMapper(UserDao.class);
  36. }
  37.  
  38. @After
  39. public void destory() throws Exception {
  40. sqlSession.commit();
  41. sqlSession.close();
  42. in.close();
  43. }
  44.  
  45. @Test
  46. public void findAllTest() throws Exception {
  47. List<User> users = userDao.findAll();
  48. for (User user : users) {
  49. System.out.println(user);
  50. System.out.println(user.getAccountList());
  51. }
  52. }
  53.  
  54. }
  1. 实体类属性和表字段对应关系、一对一、一对多查询及延迟加载均在@Result注解中配置。

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

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

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

  2. Mybatis注解开发模糊查询

    Mybatis注解开发模糊查询 一般在使用mybatis时都是采用xml文件保存sql语句 这篇文章讲一下在使用mybatis的注解开发时,如何进行模糊查询 模糊查询语句写法(在@Select注解中) ...

  3. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-2.使用Mybatis注解开发视频列表增删改查

    笔记 2.使用Mybatis注解开发视频列表增删改查     讲解:使用Mybatis3.x注解方式 增删改查实操, 控制台打印sql语句              1.控制台打印sql语句      ...

  4. Spring Boot 使用Mybatis注解开发增删改查

    使用逆向工程是遇到的错误 错误描述 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): c ...

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

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

  6. 【MyBatis】MyBatis 注解开发

    MyBatis 注解开发 文章源码 环境搭建 Mybatis 也可以使用注解开发方式,这样就可以减少编写 Mapper 映射文件. 常用注解说明: @Insert 实现新增 @Update 实现更新 ...

  7. 【java框架】MyBatis(7)--MyBatis注解开发

    1.MyBatis注解开发 1.1.Lombok的基本使用 Lombok是SpringBoot2.1.X版本与IDEA官方支持的一个插件,它是为简化POJO类中繁杂重复代码:geter/setter/ ...

  8. Mybatis注解开发(一对一)

    其他代码访问:Mybatis注解开发基础操作 1.添加OrderMapper接口 public interface OrderMapper { // @Select("select *,o. ...

  9. Mybatis注解开发

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

随机推荐

  1. 实现1.双击自动关联文件类型打开 2.PC所有驱动器 3.小型资源管理器

    感谢各位这里实现:双击自动关联文件类型打开 2.PC所有驱动器 3.小型资源管理器!! 首先主页面: 2.运用DriveInfo驱动器的信息:获得整个系统磁盘驱动!!,运用frorach循环遍历到Tr ...

  2. JVM中对象模型及相应名词概念

    JVM中对象模型及相应名词概念 java对象在jvm中的模型是OOP-Klass 模型: klass klass对应元数据,包括常量池.字段.方法等.是在加载class阶段创建instanceKlas ...

  3. MIT 6.828 Lab04 : Preemptive Multitasking

    目录 Part A:Multiprocessor Support and Cooperative Multitasking Multiprocessor Support 虚拟内存图 Exercise ...

  4. Robot Framework(5)——自动化示例

    上篇介绍了一些selenium2在robot framework中的一些关键字,这一篇主要来记录一下实际应用 一.安装并导入Selenium2Library 安装的工作一开始已经完成,可以用pip l ...

  5. Java数据结构——顺序表

    一个线性表是由n(n≥0)个数据元素所构成的有限序列. 线性表逻辑地表示为:(a0,a1,…,an-1).其中,n为线性表的长度,n=0时为空表.i为ai在线性表中的位序号. 存储结构:1.顺序存储, ...

  6. 2019年达内云PS淘宝美工平面UI/UX/UE/UED影视后期交互设计师视频

    2019年达内云PS淘宝美工平面UI/UX/UE/UED影视后期交互设计师视频 百度网盘链接一 百度网盘链接二

  7. WPF 使用WindowChrome自定义窗体 保留原生窗体特性

    本文大幅度借鉴dino.c大佬的文章 https://www.cnblogs.com/dino623/p/uielements_of_window.html https://www.cnblogs.c ...

  8. 除了方文山,用TA你也能帮周杰伦写歌词了

    周杰伦几乎陪伴了每个90后的青春,那如果AI写杰伦风格的歌词会写成怎样呢? 首先当然我们需要准备杰伦的歌词,这里一共收录了他的十几张专辑,近5000多行歌词. 原文档格式: 第一步数据预处理 def ...

  9. linux 下切换Python版本(某用户,共存,替换)

    当你安装 Debian Linux 时,安装过程有可能同时为你提供多个可用的 Python 版本,因此系统中会存在多个 Python 的可执行二进制文件.你可以按照以下方法使用 ls 命令来查看你的系 ...

  10. C++从LPEXCEPTION_POINTERS获取调用堆栈

    #pragma once #include <map> #include <vector> struct FunctionCall { DWORD64 Address; std ...