目录
1.Employee
package com.weng.bean;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
//实体类和数据库中表建立对应关系
@TableName("employee")
public class Employee {
//id是表中的主键,主键的生成策略为自增类型
@TableId(type = IdType.AUTO)
private long id;
//该属性非主键属性,解决属性名与字段名不匹配问题、属性是否是数据表中字段、
// insert、update生成策略等
@TableField(value = "last_name")
private String lastName;
private String email;
private String gender;
private long age;
//@TableField(exist=false)代表:注解的属性不与表中的字段匹配,在新增、修改时,不用去匹配
public Employee(long id, String lastName, String email, String gender, long age) {
this.id = id;
this.lastName = lastName;
this.email = email;
this.gender = gender;
this.age = age;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public long getAge() {
return age;
}
public void setAge(long age) {
this.age = age;
}
@Override
public String toString() {
return "Employee{" + "id=" + id + ", lastName='" + lastName + '\'' + ", email='" + email + '\'' + ", gender='" + gender + '\'' + ", age=" + age + '}';
}
}
2.EmployeeMapper
package com.weng.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.weng.bean.Employee;
//建议继承一个父接口,这个父接口里面有很多特别好用的方法,插件已经写好了,直接调用就可以,BaseMapper要传入一个对象
public interface EmployeeMapper extends BaseMapper<Employee> {
}
3.MyBatisUtils
//使用MyBatisPlus的session工厂
SqlSessionFactory sqlSessionFactory = new MybatisSqlSessionFactoryBuilder().build(inputStream);
package com.weng.utils;
import com.baomidou.mybatisplus.core.MybatisSqlSessionFactoryBuilder;
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 java.io.IOException;
import java.io.InputStream;
public class MyBatisUtils {
//获取session
public static SqlSession getSession(){
SqlSession session = null;
//加载配置文件,得到一个输入流
InputStream inputStream = null;
try {
//配置文件的路径
String resource = "mybatis-config.xml";
inputStream = Resources.getResourceAsStream(resource);
//获取myBatis的session工厂
//SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//通过session工厂获取一个session(此session非servlet中session
// 这个session表示myBatis框架和数据库的会话信息)
//使用MyBatisPlus的session工厂
SqlSessionFactory sqlSessionFactory = new MybatisSqlSessionFactoryBuilder().build(inputStream);
//获取到session就表示myBatis连接到数据库了,类似JDBC中connection对象
session = sqlSessionFactory.openSession();
} catch (IOException e) {
e.printStackTrace();
}
return session;
}
//关闭session
public static void closeSession(SqlSession session){
if(session!=null){
session.close();
}
}
}
4.testMybatis
package com.weng.test;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.weng.bean.Employee;
import com.weng.mapper.EmployeeMapper;
import com.weng.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.util.*;
//myBatisPlus不支持多表联查
//要么查2遍,要么
public class testMybatis {
SqlSession session = null;
EmployeeMapper em = null;
//@Before表示每次调用测试方法之前先调用@Before注解的方法init
@Before
public void init(){
//UserMapperImpl um = new UserMapperImpl();
//myBatis在底层使用动态代理(反射)自动生成Mapper实现类,不需要人工写
session = MyBatisUtils.getSession();
em = session.getMapper(EmployeeMapper.class);
//em就是自动生成的实现类
}
@Test
public void testAdd(){
Employee e = new Employee(5,"haha","111@qq.com","男",35);
int count = em.insert(e);
System.out.println(count>0?"成功":"失败");
}
@Test
public void testDelete(){
int count = em.deleteById(6);
System.out.println(count>0?"成功":"失败");
}
//多条件删除,删除名字为haha,年龄为35的记录
@Test
public void testDeleteByMap(){
Map<String,Object> map = new HashMap<String, Object>();
map.put("last_name","haha");
map.put("age","35");
int count = em.deleteByMap(map);
}
//批量删除
@Test
public void testDeleSome(){
List<Integer> ids = new ArrayList<Integer>();
ids.add(1);
ids.add(2);
int count = em.deleteBatchIds(ids);
System.out.println(count);
}
//
@Test
public void testUpdateById(){
Employee employee = em.selectById(7);
employee.setLastName("wawa");
employee.setAge(20);
em.updateById(employee);
}
@Test
public void testGetById(){
Employee employee = em.selectById(1);
System.out.println(employee);
}
@Test
public void testFindAll(){
//不传参表示全查
List<Employee> employees = em.selectList(null);
for (Employee employee : employees) {
System.out.println(employee);
}
}
@Test
public void testSelectByMap(){
Map<String,Object> map = new HashMap<String, Object>();
map.put("last_name","wawa");
List<Employee> employees = em.selectByMap(map);
for (Employee employee : employees) {
System.out.println(employee);
}
}
//select * from employee where age>=18 and gender='女'
//wrapper条件构造器
@Test
public void testWrapper(){
QueryWrapper<Employee> qw = new QueryWrapper<Employee>();
qw.ge("id",1);
qw.ge("age",18);//age>=18
qw.or();//默认是and,加个or就会变成or,拼接条件
qw.eq("gender","男");//gender=‘男’
List<Employee> employees = em.selectList(qw);
for (Employee employee : employees) {
System.out.println(employee);
}
}
@Test
public void testKuoHao(){
QueryWrapper<Employee> qw = new QueryWrapper<Employee>();
qw.and(wp -> wp.ge("id",1).or().ge("age",18));
}
@Test
public void testBetweenAnd(){
List<Employee> employees = em.selectList(new QueryWrapper<Employee>().
between("age",18,30).lt("id",4));
for (Employee employee : employees) {
System.out.println(employee);
}
}
@Test
public void testOrder(){
List<Employee> employees = em.selectList(new QueryWrapper<Employee>().
between("age",18,30).orderByAsc("id").orderByAsc("age"));
for (Employee employee : employees) {
System.out.println(employee);
}
}
@Test
public void testLike(){
List<Employee> employees = em.selectList(new QueryWrapper<Employee>().likeRight("last_name", "T"));
for (Employee employee : employees) {
System.out.println(employee);
}
}
@Test
public void testCount(){
Integer integer = em.selectCount(new QueryWrapper<Employee>().likeRight("last_name", "m"));
System.out.println(integer);
}
//聚合查询
//聚合函数和属性一起查需要分组,mysql不报错
@Test
public void testMaxMin(){
List<Map<String, Object>> maps = em.selectMaps(new QueryWrapper<Employee>().select("max(age),min(id)"));
for (Map<String, Object> map : maps) {
System.out.println(map);
}
}
@Test
public void testin(){
List<Integer> ids = new ArrayList<>();
ids.add(1);
ids.add(2);
ids.add(3);
List<Employee> employees = em.selectList(new QueryWrapper<Employee>().in("id", ids));
for (Employee employee : employees) {
System.out.println(employee);
}
}
//分页
@Test
public void testQueryPage(){
List<Integer> ids = new ArrayList<>();
ids.add(1);
ids.add(2);
ids.add(3);
int pageIndex=2;
int pageSize=3;
//返回分页的对象
IPage<Employee> page = em.selectPage(new Page<Employee>(pageIndex, pageSize),
new QueryWrapper<Employee>().in("id", ids));
List<Employee> emps = page.getRecords();//获取查询的集合数据
for (Employee emp : emps) {
System.out.println(emp);
}
long total = page.getTotal();//总数
System.out.println("总数"+total);
long current = page.getCurrent();
System.out.println("当前页码"+current);
long size = page.getSize();
System.out.println("页码大小"+size);
long pages = page.getPages();
System.out.println("总页数"+pages);
}
//@After表示每次调用测试方法之后都会调用@After注解的方法destory
@After
public void destory(){
session.commit();
MyBatisUtils.closeSession(session);
}
}