Mybatis入门案例-----使用IDEA 创建 maven java 项目,使用mapper接口实现增删改查(内含源码及详细解释)
题目
使用IDEA 创建 MAVEN JAVA 项目
根据下图 在mysql数据库中创建员工表(t_employee)
创建实体类 Employee 并创建mapper接口(EmployeeMapper.java)
以及测试类 对创建的mapper映射文件进行增删改查以及测试
项目目录结构
1.在数据库中创建表T_Employee(大小写无所谓)
DROP TABLE IF EXISTS t_employee;
CREATE TABLE t_employee (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(30) DEFAULT NULL,
age int(11) DEFAULT NULL,
birthday date DEFAULT NULL,
salary decimal(10,0) DEFAULT NULL,
PRIMARY KEY (id)
)
2.创建实体类Employee
package com.xiongluoluo.bean;
import lombok.*;
import java.math.BigDecimal;
import java.util.Date;
/**
* Created by Administrator on 2019/12/21 0021.
*/
@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Employee {
private int id;
private String name;
private int age;
private Date birthday;
private BigDecimal salary;
}
2.要使用mybatis的mapper映射文件,就必须先导入mybatis依赖,由于要和数据库进行交互,所以还要导入mysql连接数据库也就是JDBC的依赖.
2.1 pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xiongluoluo</groupId>
<artifactId>mybatis2</artifactId>
<version>1.0.0</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<!--JDBC的依赖(在https://mvnrepository.com中搜索mysql,点击第一个即可)-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies>
</project>
2.2 db.properties文件
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///test2
username=root
password=1234
2.3 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>
<properties resource="db.properties"/>
<typeAliases>
<package name="com.xiongluoluo.bean"/>
</typeAliases>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driverClassName}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="EmployeeMapper.xml"/>
</mappers>
</configuration>
2.4 EmployeeMapper.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.xiongluoluo.mapper.EmployeeMapper">
<!--使用mapper接口编程的时候,这个地方namespace的值必须是接口的全限定名
因为底层需要利用这个全限定名反射创建接口的对象,然后执行方法.所以这里必须写全限定名
就算起别名也不行,必须写全限定名!!!起别名那个最好就用在bean上,不要用在别的地方.-->
<!--当java bean(Employee)的属性与表中的列名不一致的时候,
我们可以使用resultMap对java bean(Employee)进行封装.-->
<resultMap id="employeeResultMap" type="Employee">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<result property="birthday" column="birthday"/>
<result property="salary" column="salary"/>
</resultMap>
<!--使用mapper接口编程的时候
namespace对应mapper接口的全限定名
id对应mapper接口中的方法名
parameterType对应mapper接口中的参数类型
resultMap/resultType对应方法中的返回值类型-->
<!--查询全部-->
<select id="selectAllEmployee" resultMap="employeeResultMap">
<!--由于我这里实体类Employee的属性跟数据库中的列名是一致的
所以返回值可以直接写resultType="Employee"
还有一点就是虽然查询全部返回的是List<Employee>,
但是我们这里写resultType的时候还是写Employee即可-->
select id,name,age,birthday,salary from t_employee
</select>
<!--通过id查询-->
<select id="selectEmployeById" parameterType="int" resultMap="employeeResultMap">
select id,name,age,birthday,salary from t_employee where id=#{id}
</select>
<!--通过id删除-->
<delete id="deleteEmployeeById" parameterType="int">
delete from t_employee where id=#{id}
</delete>
<!--修改信息(先查询,再修改)-->
<update id="updateEmployee" parameterType="Employee">
update t_employee set name=#{name},age=#{age},birthday=#{birthday},salary=#{salary}
/*这里不要修改id,id是主键,修改的时候,不能相同.干脆别写了*/
</update>
<!--添加员工信息-->
<insert id="insertEmployee" parameterType="Employee">
insert into t_employee values(null,#{name},#{age},#{birthday},#{salary})
</insert>
</mapper>
2.5 EmployeeMapper.java文件(mapper接口)
package com.xiongluoluo.mapper;
import com.xiongluoluo.bean.Employee;
import java.util.List;
/**
* Created by Administrator on 2019/12/22 0022.
*/
public interface EmployeeMapper {
//查询全部
public List<Employee> selectAllEmployee();
//通过id查询
public Employee selectEmployeById(int id);
//通过id删除
public void deleteEmployeeById(int id);
//修改信息(先查询,再修改)
public void updateEmployee(Employee employee);
//添加员工信息
public void insertEmployee(Employee employee);
/*使用mapper接口编程的时候,增删改是没有返回值的,只有查询有返回值.*/
}
4 测试
4.1 获取SqlSession的工具类
package com.xiongluoluo.utils;
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;
/**
* Created by Administrator on 2019/12/22 0022.
*/
public class MybatisUtil {
//这个方法封装到SqlSession即可,提交事务还需要SqlSession,不能再继续往下封装了.
public static SqlSession getSqlSession(){
String resource = "mybatis-config.xml";
SqlSession sqlSession = null;
try {
InputStream is = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
sqlSession = sqlSessionFactory.openSession();
} catch (IOException e) {
e.printStackTrace();
}
return sqlSession;
}
}
4.2 测试类
package com.xiongluoluo.test;
import com.xiongluoluo.bean.Employee;
import com.xiongluoluo.mapper.EmployeeMapper;
import com.xiongluoluo.utils.MybatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* Created by Administrator on 2019/12/22 0022.
*/
public class MybatisTest {
//查询全部
@Test
public void testSelectAllEmployee(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
List<Employee> employeeList = employeeMapper.selectAllEmployee();
for(Employee employee : employeeList){
System.out.println(employee);
}
}
//通过id查询
@Test
public void testSelectEmployeeById(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
Employee employee = employeeMapper.selectEmployeById(7);
System.out.println(employee);
}
//通过id删除
@Test
public void testDeleteEmployeeById(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
employeeMapper.deleteEmployeeById(22);
sqlSession.commit();
sqlSession.close();
//增删改一定要记得提交事务
}
//修改信息(先查询,再修改)
@Test
public void testUpdateEmployee(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
Employee employee = employeeMapper.selectEmployeById(8);
employee.setName("小虎");
employee.setAge(33);
employeeMapper.updateEmployee(employee);
}
//添加员工信息
@Test
public void testInsertEmployee(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
Employee employee = new Employee();
employee.setName("春天");
employee.setAge(18);
employee.setBirthday(new Date());
employee.setSalary(new BigDecimal(8000));
employeeMapper.insertEmployee(employee);
sqlSession.commit();
sqlSession.close();
//提交事务,提交事务,一定要记得提交事务
}
}