MyBatisPlus学习笔记(一)Mapper CRUD接口 Wrapper条件构造器

MyBatisPlus学习笔记(一)Mapper CRUD接口 Wrapper条件构造器

Mapper CRUD接口

基础配置

  • 以下所有方法都建立在此基础之下

  • public class TestMP {
    	
    	ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    	
    	EmployeeMapper empMapper = applicationContext.getBean("employeeMapper", EmployeeMapper.class);
        // ...
    }
    
  • applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xmlns:tx="http://www.springframework.org/schema/tx"
    	xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
    	xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
    		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
    		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
    		
    		
    	<context:property-placeholder location="classpath:db.properties"/>
    	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    		<property name="driverClass" value="${jdbc.driver}"></property>
    		<property name="jdbcUrl" value="${jdbc.url}"></property>
    		<property name="user" value="${jdbc.user}"></property>
    		<property name="password" value="${jdbc.password}"></property>
    	</bean>
    	
    	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    		<property name="dataSource" ref="dataSource"></property>
    	</bean>
    	<!-- 基于注解的事务管理 -->
    	<tx:annotation-driven transaction-manager="dataSourceTransactionManager"/>
    	
    	<!--  配置SqlSessionFactoryBean 
    		Mybatis提供的: org.mybatis.spring.SqlSessionFactoryBean
    		MP提供的:com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean
    	 -->
    	<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
    		<property name="dataSource" ref="dataSource"></property>
    		<property name="configLocation" value="classpath:mybatis-config.xml"></property>
    		<!-- 别名处理 -->
    		<property name="typeAliasesPackage" value="com.fu.bean"></property>		
    		
    		<!-- 注入全局MP策略配置 -->
    		<property name="globalConfig" ref="globalConfiguration"></property>
    	</bean>
    	
    	<!-- 定义MybatisPlus的全局策略配置-->
    	<bean id ="globalConfiguration" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
    		<!-- 在2.3版本以后,dbColumnUnderline 默认值就是true 
    			驼峰命名法
    		-->
    		<property name="dbColumnUnderline" value="true"></property>
    		
    		<!-- 全局的主键策略 
    			value: 
    				AUTO(0, "数据库ID自增"), INPUT(1, "用户输入ID"),
    			   	 以下2种类型、只有当插入对象ID 为空,才自动填充。
    			    ID_WORKER(2, "全局唯一ID"), UUID(3, "全局唯一ID"), NONE(4, "该类型为未设置主键类型"),
    			    ID_WORKER_STR(5, "字符串全局唯一ID");
    		-->
    		<property name="idType" value="0"></property>
    		
    		<!-- 全局的表前缀策略配置 -->
    		<property name="tablePrefix" value="tbl_"></property>
    	</bean>
    	
    	<!-- 
    		配置mybatis 扫描mapper接口的路径
    	 -->
    	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    		<property name="basePackage" value="com.fu.mapper"></property>
    	</bean>
    </beans>
    
  • mybatis-config.xml

    <?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">
    	
    <configuration>
    </configuration>
    
  • db.properties

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/xxx
    jdbc.user=xxx
    jdbc.password=xxx
    # 将xxx改为自己的即可
    
  • log4j.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
     
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
     
     <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
       <param name="Encoding" value="UTF-8" />
       <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m  (%F:%L) \n" />
       </layout>
     </appender>
     <logger name="java.sql">
       <level value="debug" />
     </logger>
     <logger name="org.apache.ibatis">
       <level value="info" />
     </logger>
     <root>
       <level value="debug" />
       <appender-ref ref="STDOUT" />
     </root>
    </log4j:configuration>
    

验证数据库是否连接成功

  • @Test
    public void testDatasource() throws SQLException {
        DataSource sd = applicationContext.getBean("dataSource", DataSource.class);
        System.out.println(sd);
        Connection connection = sd.getConnection();
        System.out.println(connection);
    }
    // 打印出 com.mchange.v2.c3p0.impl.NewProxyConnection@353352b6 [wrapping: com.mysql.jdbc.JDBC4Connection@4681c175] 即代表连接成功
    

通用CRUD

通用CRUD insert

public void testInsertAllColumn() {
    Employee employee = new Employee();
    employee.setLastName("efda");
    // insert方法在插入时, 会根据实体类的每个属性进行非空判断,只有非空的属性对应的字段才会出现到SQL语句中
    Integer result = empMapper.insertAllColumn(employee);
    // INSERT INTO tbl_employee ( last_name,email,gender,age ) VALUES ( ?,?,?,? )

    // insertAllColumn方法在插入时, 不管属性是否非空, 属性所对应的字段都会出现到SQL语句中
    //		Integer insert = empMapper.insert(employee);
    // INSERT INTO tbl_employee ( last_name ) VALUES ( ? )
    System.out.println("result="+result);

    //获取当前数据在数据库中的主键值
    Integer key = employee.getId();
    System.out.println("key:" + key );
}

通用CRUD update

public void testUpdate() {
    Employee employee = new Employee();
    employee.setLastName("az");
    employee.setAge(24);
    employee.setGender(1);
    employee.setId(4);

    //		Integer update = empMapper.updateById(employee);
    // UPDATE tbl_employee SET last_name=?, gender=?, age=? WHERE id=? 

    //		Integer update = empMapper.updateAllColumnById(employee);
    // UPDATE tbl_employee SET last_name=?,email=?,gender=?,age=? WHERE id=?

    String setSql = "age = 18 where id = 5";
    Integer update = empMapper.updateForSet(setSql, null);
    // UPDATE tbl_employee SET age = 18 where id = 5
    System.out.println("update="+update);
}

通用CRUD select

	public void testSelect() {
		// 1. 通过id查询
//		Employee employee = empMapper.selectById(2);
		// SELECT id,last_name AS lastName,email,gender,age FROM tbl_employee WHERE id=?
//		System.out.println(employee);
		
		//2. 通过多个id进行查询    <foreach>
//		List<Integer> ids = new ArrayList<>();
//		ids.add(1);
//		ids.add(2);
//		ids.add(3);
//		ids.add(4);
//		List<Employee> list = empMapper.selectBatchIds(ids);
//		//  SELECT id,last_name AS lastName,email,gender,age FROM tbl_employee WHERE id IN ( ? , ? , ? , ? )
//		System.out.println(list);
		
		//3. 通过多个列进行查询    age  +  lastName
		// 查询的结果只能是一条,如果是多条则报错
//		Employee employee = new Employee();
//		employee.setLastName("qaaz");
//		employee.setAge(18);
//		Employee employeeOne = empMapper.selectOne(employee);
//		// SELECT id,last_name AS lastName,email,gender,age FROM tbl_employee WHERE last_name=? AND age=?
//		System.out.println(employeeOne);
		
		
		//4. 通过Map封装条件查询
//		Map<String, Object> map = new HashMap<>();
//		map.put("last_name", "az");
//		map.put("gender", 1);
//		List<Employee> list = empMapper.selectByMap(map);
		// SELECT id,last_name AS lastName,email,gender,age FROM tbl_employee WHERE gender = ? AND last_name = ?
		
		//5. 分页查询
		// 假分页,物理分页,查询所有数据,显示的时候再分页显示
		List<Employee> list = empMapper.selectPage(new Page<>(2,3), null);
		// SELECT id,last_name AS lastName,email,gender,age FROM tbl_employee
		System.out.println(list);
		
	}

通用CRUD delete

	public void testDelete() {
		// 1. 通过id删除
//		Integer result = empMapper.deleteById(1);
		// DELETE FROM tbl_employee WHERE id=?
		
		//2. 通过多个id进行删除
//		List<Integer> ids = new ArrayList<>();
//		ids.add(1);
//		ids.add(2);
//		ids.add(3);
//		Integer result = empMapper.deleteBatchIds(ids);
		// DELETE FROM tbl_employee WHERE id IN ( ? , ? , ? )
		
		//3. 通过Map封装条件删除
		// 可以删除多个满足条件的数据
		Map<String, Object> map = new HashMap<>();
		map.put("last_name", "qaaz");
		map.put("age", 18);
		Integer result = empMapper.deleteByMap(map);
		// DELETE FROM tbl_employee WHERE last_name = ? AND age = ?
		System.out.println("result="+result);
	}

条件构造器(Wrapper)

  • 简介:条件构造器是由wrapper这个抽象类构成的,该类有两个子类,分别是EntityWrapper 和 Condition两个类,两个子类用法相同,本例使用EntityWrapper介绍
  • [外链图片转存失败(img-GjkVZoIA-1564995361812)(assets/1.png)]

条件构造器 update

	public void wrapperUpdate() {
		Employee employee = new Employee();
		employee.setLastName("kongming");
		employee.setAge(20);
		employee.setGender(1);
		
		Integer update = empMapper.update(employee, new EntityWrapper<Employee>()
				.eq("last_name", "efda")
				.eq("gender", 0)
				);
		// UPDATE tbl_employee SET last_name=?, gender=?, age=? WHERE (last_name = ? AND gender = ?)
		System.out.println("update="+update);
	}

条件构造器 select

	public void wrapperSelect() {
		// 1. 查询符合条件的集合
		// 查询名字是qaaz,且年龄在18~40之间,或性别是男,名字中含有q的人
/*		List<Employee> list = empMapper.selectList(new EntityWrapper<Employee>()
				// 必须是数据库字段名
				.eq("last_name", "qaaz")
				.between("age", 18, 40)
				.or()		// (last_name = ? AND age BETWEEN ? AND ? OR gender = ? AND last_name LIKE ?) 
				//.orNew()	// (last_name = ? AND age BETWEEN ? AND ?) OR (gender = ? AND last_name LIKE ?)
				.eq("gender", 1)
				.like("last_name", "q")
				);
		System.out.println(list);
		*/
		
		// 2.查询符合条件的条数
//		Integer count = empMapper.selectCount(new EntityWrapper<Employee>().eq("gender", 1));
//		System.out.println("count="+count);
		
		// 3.查询满足条件的数据,只返回第一个字段的值
//		List<Object> list = empMapper.selectObjs(new EntityWrapper<Employee>().eq("gender", 1));
//		System.out.println(list);
		
		// 4. 按照年龄排序,并分页
		// 仍然是假分页
/*		List<Map<String,Object>> list = empMapper.selectMapsPage(new Page<Employee>(2, 3), new EntityWrapper<Employee>()
//				.orderAsc(Arrays.asList(new String[] {"age"} ))		//升序
				.orderDesc(Arrays.asList(new String[] {"age"} ))	// 倒 序
				);
		// SELECT id,last_name AS lastName,email,gender,age FROM tbl_employee ORDER BY age DESC
		System.out.println(list);
		*/
		
		// 5. 简单分页, 真实分页
		List<Employee> list = empMapper.selectList(new EntityWrapper<Employee>()
				.last("limit 1,3"));
		// .last() 手动把sql拼接到最后 (有sql注入的风险) 
		// SELECT id,last_name AS lastName,email,gender,age FROM tbl_employee limit 1,3
		System.out.println(list);
	}

条件构造器 delete

public void wrapperDelete() {
		Integer delete = empMapper.delete(new EntityWrapper<Employee>()
				.like("last_name", "s")
				);
		// DELETE FROM tbl_employee WHERE (last_name LIKE ?)
		// Parameters: %s%(String)   会自动添加 % 
		System.out.println("delete = "+delete);
	}
发布了21 篇原创文章 · 获赞 5 · 访问量 2065

猜你喜欢

转载自blog.csdn.net/fan521dan/article/details/97971449
今日推荐