MyBatis的注解开发

怼烎@ 2021-06-10 20:37 612阅读 0赞

单表的CRUD注解开发:

User实体类:

  1. package com.zyb.pojo;
  2. import java.io.Serializable;
  3. import java.util.Date;
  4. public class User implements Serializable {
  5. private Integer id;
  6. private String username;
  7. private String sex;
  8. private String address;
  9. private Date birthday;
  10. public User() {
  11. }
  12. @Override
  13. public String toString() {
  14. return "User{" +
  15. "id=" + id +
  16. ", username='" + username + '\'' +
  17. ", sex='" + sex + '\'' +
  18. ", address='" + address + '\'' +
  19. ", birthday=" + birthday +
  20. '}';
  21. }
  22. public Integer getId() {
  23. return id;
  24. }
  25. public void setId(Integer id) {
  26. this.id = id;
  27. }
  28. public String getUsername() {
  29. return username;
  30. }
  31. public void setUsername(String username) {
  32. this.username = username;
  33. }
  34. public String getSex() {
  35. return sex;
  36. }
  37. public void setSex(String sex) {
  38. this.sex = sex;
  39. }
  40. public String getAddress() {
  41. return address;
  42. }
  43. public void setAddress(String address) {
  44. this.address = address;
  45. }
  46. public Date getBirthday() {
  47. return birthday;
  48. }
  49. public void setBirthday(Date birthday) {
  50. this.birthday = birthday;
  51. }
  52. }

UserDao:

  1. package com.zyb.dao;
  2. import com.zyb.pojo.User;
  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 java.util.List;
  8. public interface UserDao {
  9. @Select("select * from my_user")
  10. List<User> selAllUsers();
  11. @Insert("insert into my_user(username,address,sex,birthday) values(#{username},#{address},#{sex},#{birthday}) ")
  12. void saveUser(User u);
  13. @Update("update my_user set username=#{username} where id=#{id}")
  14. void updateUser(User user);
  15. @Delete("delete from my_user where id=#{id}")
  16. void deleteUserById(int userId);
  17. @Select("select * from my_user where id=#{id}")
  18. User selUserById(int userId);
  19. @Select("select * from my_user where username like '%${value}%'")
  20. // @Select("select * from my_user where username like #{username}")
  21. List<User> selUserByName(String userName);
  22. @Select("select count(*) from my_user")
  23. int usersNum();
  24. }

测试:

  1. package com.zyb.test;
  2. import com.zyb.dao.UserDao;
  3. import com.zyb.pojo.User;
  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 java.io.InputStream;
  12. import java.util.Date;
  13. import java.util.List;
  14. public class AnnotationCRUDTest {
  15. private InputStream in;
  16. private SqlSessionFactory factory;
  17. private SqlSession session;
  18. private UserDao userDao;
  19. @Before
  20. public void init()throws Exception{
  21. in = Resources.getResourceAsStream("mybatis-config.xml");
  22. factory = new SqlSessionFactoryBuilder().build(in);
  23. session = factory.openSession();
  24. userDao = session.getMapper(UserDao.class);
  25. }
  26. @After
  27. public void destroy()throws Exception{
  28. session.commit();
  29. session.close();
  30. in.close();
  31. }
  32. @Test
  33. public void testSelAllUsers(){
  34. List<User> users=userDao.selAllUsers();
  35. users.forEach(x-> System.out.println(x));
  36. }
  37. @Test
  38. public void testSaveUser(){
  39. User user= new User();
  40. user.setSex("男");
  41. user.setAddress("地球");
  42. user.setBirthday(new Date());
  43. user.setUsername("zhang");
  44. userDao.saveUser(user);
  45. }
  46. @Test
  47. public void testUpdateUser(){
  48. User user = new User();
  49. user.setId(58);
  50. user.setUsername("liu");
  51. user.setSex("女");
  52. userDao.updateUser(user);
  53. }
  54. @Test
  55. public void testDeleteUserById(){
  56. userDao.deleteUserById(58);
  57. }
  58. @Test
  59. public void testSelUserById(){
  60. User user= userDao.selUserById(52);
  61. System.out.println(user);
  62. }
  63. @Test
  64. public void testSelUserByName(){
  65. List<User> users=userDao.selUserByName("王");
  66. users.forEach(x-> System.out.println(x));
  67. }
  68. @Test
  69. public void testUsersNum(){
  70. int num=userDao.usersNum();
  71. System.out.println(num);
  72. }
  73. }

多表注解操作:

逻辑:一个用户可以有多个账户,一个账户只能被一个用户拥有

User实体类多了一个:

format_png

新增的Account实体类:

  1. package com.zyb.pojo;
  2. import java.io.Serializable;
  3. public class Account implements Serializable {
  4. private Integer id;
  5. private Integer uid;
  6. private Double money;
  7. private User user;
  8. public User getUser() {
  9. return user;
  10. }
  11. public void setUser(User user) {
  12. this.user = user;
  13. }
  14. @Override
  15. public String toString() {
  16. return "Account{" +
  17. "id=" + id +
  18. ", uid=" + uid +
  19. ", money=" + money +
  20. '}';
  21. }
  22. public Integer getId() {
  23. return id;
  24. }
  25. public void setId(Integer id) {
  26. this.id = id;
  27. }
  28. public Integer getUid() {
  29. return uid;
  30. }
  31. public void setUid(Integer uid) {
  32. this.uid = uid;
  33. }
  34. public Double getMoney() {
  35. return money;
  36. }
  37. public void setMoney(Double money) {
  38. this.money = money;
  39. }
  40. public Account() {
  41. }
  42. }

AccountDao:

  1. package com.zyb.dao;
  2. import com.zyb.pojo.Account;
  3. import org.apache.ibatis.annotations.*;
  4. import org.apache.ibatis.mapping.FetchType;
  5. import java.util.List;
  6. public interface AccountDao {
  7. @Select("select * from my_account")
  8. @Results(id="accountMap",value = {
  9. @Result(property = "id",column = "id",id=true),
  10. @Result(property = "uid",column = "uid"),
  11. @Result(property = "money",column = "money"),
  12. @Result(property = "user",column = "uid",one = @One(select = "com.zyb.dao.UserDao.selUserById",fetchType= FetchType.EAGER))
  13. })
  14. List<Account> selAllAccounts2User();
  15. @Select("select * from my_account where uid=#{uid}")
  16. @ResultMap("accountMap")
  17. List<Account> selAccountsByUid();
  18. }

UserDao:

  1. package com.zyb.dao;
  2. import com.zyb.pojo.User;
  3. import org.apache.ibatis.annotations.*;
  4. import org.apache.ibatis.mapping.FetchType;
  5. import java.util.List;
  6. public interface UserDao {
  7. @Select("select * from my_user")
  8. @Results(id="userMap" ,value={
  9. @Result(property = "userId",column="id" ,id=true),
  10. @Result(property = "userName",column="username"),
  11. @Result(property = "userAddress",column="address"),
  12. @Result(property = "userSex",column="sex"),
  13. @Result(property = "userBirthday",column="birthday"),
  14. @Result(property = "accounts",column = "id",many = @Many(select = "com.zyb.dao.AccountDao.selAccountsByUid",fetchType = FetchType.LAZY))
  15. })
  16. List<User> selAllUsers();
  17. @Select("select * from my_user where id=#{id}")
  18. @ResultMap(value = {"userMap"})
  19. User selUserById(int userId);
  20. @Select("select * from my_user where username like #{username}")
  21. @ResultMap(value = {"userMap"})
  22. List<User> selUserByName(String userName);
  23. }

Dao层分析:

Results点进去的源码:

id属性、Result类型的value数组

format_png 1

Result类型点进去的源码:

format_png 2

One或Many点进去的源码:

format_png 3

注意在使用注解是mybatis-config.xml的配置

format_png 4

发表评论

表情:
评论列表 (有 0 条评论,612人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Mybatis 注解开发

    这几年来注解开发越来越流行,Mybatis 也可以使用注解开发方式,这样我们就可以减少编写 Mapper 映射 文件了。本次我们先围绕一些基本的 CRUD 来学习,再学习复杂映