以下所有方法都建立在此基础之下
public class TestMP {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
EmployeeMapper empMapper = applicationContext.getBean("employeeMapper", EmployeeMapper.class);
// ...
}
applicationContext.xml
<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"/>
<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>
<property name="globalConfig" ref="globalConfiguration">property>
bean>
<property name="dbColumnUnderline" value="true">property>
<property name="idType" value="0">property>
<property name="tablePrefix" value="tbl_">property>
bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.fu.mapper">property>
bean>
beans>
mybatis-config.xml
<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
<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] 即代表连接成功
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 );
}
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);
}
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进行查询
// List ids = new ArrayList<>();
// ids.add(1);
// ids.add(2);
// ids.add(3);
// ids.add(4);
// List 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 map = new HashMap<>();
// map.put("last_name", "az");
// map.put("gender", 1);
// List 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);
}
public void testDelete() {
// 1. 通过id删除
// Integer result = empMapper.deleteById(1);
// DELETE FROM tbl_employee WHERE id=?
//2. 通过多个id进行删除
// List 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);
}
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);
}
public void wrapperSelect() {
// 1. 查询符合条件的集合
// 查询名字是qaaz,且年龄在18~40之间,或性别是男,名字中含有q的人
/* List list = empMapper.selectList(new EntityWrapper()
// 必须是数据库字段名
.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().eq("gender", 1));
// System.out.println("count="+count);
// 3.查询满足条件的数据,只返回第一个字段的值
// List
// System.out.println(list);
// 4. 按照年龄排序,并分页
// 仍然是假分页
/* 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);
}
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);
}