通用Mapper
1、通用Mapper的使用
1.0、實體類
1 @Table(name = "tb_user") 2 public class User { 3 4 5 @Id 6 @GeneratedValue(generator = "JDBC") 7 private Long id; 8 // 用戶名 9 private String userName; 10 // 密碼 11 private String password; 12 // 姓名 13 private String name; 14 // 年齡 15 private Integer age; 16 // 性別,1男性,2女性 17 private Integer sex; 18 // 出生日期 19 private Date birthday; 20 // 創建時間 21 private Date created; 22 // 更新時間 23 private Date updated; 24 //set、get方法.... 25 26 }
泛型(實體類)<T>的類型必須符合要求
1 1、表名默認使用類名,駝峰轉下划線(只對大寫字母進行處理),如UserInfo默認對應的表名為user_info。 2 3 2、表名可以使用@Table(name = "tableName")進行指定,對不符合第一條默認規則的可以通過這種方式指定表名. 4 5 3、字段默認和@Column一樣,都會作為表字段,表字段默認為Java對象的Field名字駝峰轉下划線形式. 6 7 4、可以使用@Column(name = "fieldName")指定不符合第3條規則的字段名 8 9 5、使用@Transient注解可以忽略字段,添加該注解的字段不會作為表字段使用. 10 11 6、建議一定是有一個@Id注解作為主鍵的字段,可以有多個@Id注解的字段作為聯合主鍵. 12 13 獲取自增主鍵: 14 15 //不限於@Id注解的字段,但是一個實體類中只能存在一個(繼承關系中也只能存在一個) 16 @GeneratedValue(generator = "JDBC") 17 private Integer id; 18 這會令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法來取出由數據庫內部生成的主鍵(比如:像 MySQL 和 SQL Server 這樣的關系數據庫管理系統的自動遞增字段)。
1.1、導入依賴
1 <!-- 通用mapper --> 2 <dependency> 3 <groupId>tk.mybatis</groupId> 4 <artifactId>mapper-spring-boot-starter</artifactId> 5 <version>2.0.2</version> 6 </dependency>
1.2、開啟包掃描
注意導入的包,一定要和導入的的依賴有關的包
1 import org.springframework.boot.SpringApplication; 2 import org.springframework.boot.autoconfigure.SpringBootApplication; 3 import tk.mybatis.spring.annotation.MapperScan; 4 5 @SpringBootApplication 6 @MapperScan("com.myx.demo.mapper") 7 public class Application { 8 public static void main(String[] args) { 9 SpringApplication.run(Application.class); 10 } 11 }
1.3、UserMapper接口繼承通用Mapper
1 package com.myx.demo.mapper; 2 import com.myx.demo.pojo.User; 3 import tk.mybatis.mapper.common.Mapper; 4 5 public interface UserMapper extends Mapper<User>{ 6 7 }
1.4、SpringBoot默認的文件名Application.yml配置
1 server: 2 port: 8080 3 4 logging: 5 level: 6 com.myx.demo: 7 debug 8 spring: 9 datasource: #spring數據源的配置 10 url: jdbc:mysql://localhost:3306/day11mybatis 11 username: root 12 password: 123
1.5、通用Mapper的測試類
1 @RunWith(SpringRunner.class) 2 @SpringBootTest(classes = Application.class) 3 public class NewUserMapperTest { 4 5 @Autowired 6 private UserMapper userMapper; 7 8 9 }
1.5.1 id 的專用查詢方法
1 @Test 2 public void testSelectId() { 3 userMapper.selectByPrimaryKey(1L);//id專用查詢方法 4 System.out.println( userMapper.selectByPrimaryKey(1L)); 5 }
1.5.2 屬性查詢
1 @Test 2 public void testSelectName() { 3 User user = new User(); 4 user.setName("張三");//哪個屬性有值where條件就根據哪個屬性生成,id除外 5 List<User> select = userMapper.select(user); 6 System.out.println(select); 7 }
1.5.3 屬性值唯一查詢
1 @Test 2 public void testSelectOne() { 3 User user = new User(); 4 user.setUserName("zhangsan");//查詢值有多個會報錯 5 6 System.out.println(userMapper.selectOne(user)); 7 8 }
1.5.4 統計個數
1 @Test 2 public void testSelectCount() { 3 System.out.println(userMapper.selectCount(null));//沒有查詢條件就全查 4 }
1.5.5 插入
1 @Test 2 public void testInsert() { 3 User user = new User(); 4 user.setUserName("孫悟空"); 5 user.setName("sunwukong"); 6 user.setAge(500); 7 user.setId(50L); 8 user.setPassword("234"); 9 int insert = userMapper.insert(user); 10 System.out.println(insert); 11 }
1.5.6 selective插入
1 /* 2 * insertSelective方法:有值才操作,沒有值不理會,比上insert方法效率高 3 * */ 4 @Test 5 public void testInsertSelective() { 6 User user = new User(); 7 user.setUserName("豬八戒"); 8 user.setName("sunwukong"); 9 user.setAge(500); 10 user.setId(51L); 11 user.setPassword("234"); 12 user.setCreated(new Date()); 13 int insert = userMapper.insertSelective(user); 14 System.out.println(insert); 15 }
1.5.7 刪除
1 @Test 2 public void testDelete() { 3 User user = new User(); 4 user.setUserName("孫悟空"); 5 int delete = userMapper.delete(user); 6 System.out.println(delete); 7 }
1.5.8 根據id刪除,主鍵的特有方法
1 @Test 2 public void testDeleteByPrimaryKey() { 3 userMapper.deleteByPrimaryKey(51L); 4 }
1.5.9 修改
1 /* 2 * 指定的屬性改變為指定的值,其余的為null 3 * */ 4 @Test 5 public void testUpdateByPrimaryKey() { 6 User user = new User(); 7 user.setId(36L); 8 user.setUserName("李白"); 9 user.setName("libai"); 10 11 userMapper.updateByPrimaryKey(user); 12 }
1.5.10 selecttive修改
/* * 只改變指定的屬性,其余屬性不變 * */ @Test public void testUpdatePriimarySelective() { User user = new User(); user.setId(33L); user.setUserName("王昭君"); user.setName("wangzhaojun"); user.setUpdated(new Date()); userMapper.updateByPrimaryKeySelective(user); }
2 通用Mapper分頁
2.1 分頁的依賴
<!--分頁的依賴--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.3</version> </dependency>
2.2 分頁方法的測試
@RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class) public class MapperPageQueryTest { @Autowired private UserMapper userMapper; @Test public void testPageQuery() { //開啟分頁 PageHelper.startPage(3,5); //不包含總的頁數,總的元素個數 List<User> select = userMapper.select(null); System.out.println(select); } @Test public void testPageInfoQuery() { //開啟分頁 PageHelper.startPage(3,5); //用page類型或者pageInfo類型目的就是獲取總頁數以及總條數 Page<User> userPage = (Page<User>) userMapper.select(null); //分頁返回的結果 //PageInfo<User> pageInfo = new PageInfo<>(select); System.out.println(userPage); } }
3 通用Mapper組合查詢和排序
3.1 添加普通條件
/* * example要表達的含義為??? * 組合的查詢條件 * */ @Test public void testSelectByExample(){ //條件的組合工具 Example example = new Example(User.class); //條件,一個criteria中可以組合無數個條件,但是這些條件都是and關系 Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("sex","1"); criteria.andBetween("age",20,30); List<User> users = userMapper.selectByExample(example); System.out.println("users = " + users); }
3.2 添加or條件的組合查詢
@Test public void testSelectByExampleOr(){ //條件的組合工具 Example example = new Example(User.class); //條件,一個criteria中可以組合無數個條件,但是這些條件都是and關系 Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("sex","1"); Example.Criteria criteria1 = example.createCriteria(); criteria1.andLike("name","%李%"); //直接使用example的or方法使得第二個條件和原來的條件組合or關系 example.or(criteria1); System.out.println(userMapper.selectByExample(example)); }
3.3 排序
@Test public void testSelectByExampleOrder(){ //條件的組合工具 Example example = new Example(User.class); //條件,一個criteria中可以組合無數個條件,但是這些條件都是and關系 Example.Criteria criteria = example.createCriteria(); criteria.andEqualTo("sex","1"); Example.Criteria criteria1 = example.createCriteria(); criteria1.andLike("name","%李%"); //直接使用example的or方法使得第二個條件和原來的條件組合or關系 example.or(criteria1); //排序 example.setOrderByClause("id DESC"); System.out.println(userMapper.selectByExample(example)); }