MyBatis笔记:增删改功能
MyBatis实现增删改
通过mybatis实现增删改功能,依然是通过接口绑定sql映射文件
如有疑问参考之前的文章:https://blog.csdn.net/qq_36949176/article/category/8464528
Employee类
package com.yorkmass.mybatis.bean;
import org.apache.ibatis.type.Alias;
@Alias("emp")
public class Employee {
private Integer id;
private String lastName;
private String email;
private String gender;
public Employee(){
super();
}
public Employee(Integer id, String lastName, String email, String gender) {
super();
this.id = id;
this.lastName = lastName;
this.email = email;
this.gender = gender;
}
public Integer getId() {
return id;
}
public void setId(Integer 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;
}
@Override
public String toString() {
return "Employee [id=" + id + ", lastName=" + lastName + ", email=" + email + ", gender=" + gender + "]";
}
}
接口文件
package com.yorkmass.mybatis.dao;
import com.yorkmass.mybatis.bean.Employee;
public interface EmployeeMapper {
public Employee getEmpById(Integer id);
public void addEmp(Employee employee);
//定义返回值类型
//public Long addEmp(Employee employee);
public boolean updateEmp(Employee employee);
// public void updateEmp(Employee employee);
public void deleteEmpById(Integer id);
}
sql映射文件
<?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.yorkmass.mybatis.dao.EmployeeMapper">
<!--
namespace:名称空间;指定为接口的全类名
id:唯一标识
resultType:返回值类型
#{id}:从传递过来的参数中取出id值
public Employee getEmpById(Integer id);
-->
<!-- 如果有两个同样的方法,不带数据库标识的会被舍弃,默认加载不带标识和带标识的,如果两个不同方法,一个带标识,一个不带标识,则都加载 -->
<select id="getEmpById" resultType="emp" >
select * from tbl_employee where id = #{id}
</select>
<select id="getEmpById" resultType="emp" databaseId="mysql">
select * from tbl_employee where id = #{id}
</select>
<select id="getEmpById" resultType="emp" databaseId="oracle">
select * from tbl_employee where id = #{id}
</select>
<!-- public void addEmp(Employee employee);-->
<!-- parameterType:可以省略, -->
<insert id="addEmp" parameterType="com.yorkmass.mybatis.bean.Employee">
insert into tbl_employee(last_name,email,gender)
value(#{lastName},#{email},#{gender})
</insert>
<!-- public void updateEmp(Employee employee);-->
<update id="updateEmp">
update tbl_employee
set last_Name=#{lastName},email=#{email},gender=#{gender}
where id=#{id}
</update>
<!-- public void deleteEmpById(Integer id);-->
<delete id="deleteEmpById">
delete from tbl_employee where id=#{id}
</delete>
</mapper>
测试文件
其中test03方法包含增删改
package com.yorkmass.mybatis.test;
import java.io.IOException;
import java.io.InputStream;
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 org.junit.Test;
import com.yorkmass.mybatis.bean.Employee;
import com.yorkmass.mybatis.dao.EmployeeMapper;
import com.yorkmass.mybatis.dao.EmployeeMapperAnnotation;
public class MyBatisTest {
public SqlSessionFactory getSqlSessionFactory() throws IOException{
String resource="mybatis-config.xml";
InputStream inputStream=Resources.getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(inputStream);
}
/**
* 1、根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象
* 有数据源一些运行环境信息
* 2、sql映射文件;配置了每一个sql,以及sql的封装规则等。
* 3、将sql映射文件注册在全局配置文件中
* 4、写代码:
* 1)、根据全局配置文件得到sqlSessionFatory;
* 2)、使用sqlSession工厂,获取到sqlSession对象使用他来执行增删改查
* 一个sqlSession就是代表和数据库的一次会话,用完关闭
* 3)、使用sql的唯一标识来告诉MyBatis执行哪个sql,sql都是保存在映射文件中的
* @throws IOException
*/
// @Test
// public void test() throws IOException {
// String resource = "mybatis-config.xml";
// InputStream inputStream = Resources.getResourceAsStream(resource);
// SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// //获取sqlSession实例,能直接执行已经映射的sql语句
// //sql的唯一标识:statement Unique identifier matching the statement to use.
// //执行sql要用的参数:parameter A parameter object to pass to the statement.
// SqlSession openSession = sqlSessionFactory.openSession();
// try {
// Employee employee=openSession.selectOne("com.yorkmass.mybatis.EmployeeMapper.selectEmp", 1);
// System.out.println(employee);
// } finally {
// openSession.close();
// }
// }
@Test
public void test01() throws IOException{
//1、获取sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory= getSqlSessionFactory();
//2、获取sqlSession对象
SqlSession openSession =sqlSessionFactory.openSession();
try{
//3、获取接口的实现类对象
//会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
EmployeeMapper mapper=openSession.getMapper(EmployeeMapper.class);
Employee employee=mapper.getEmpById(2);
System.out.println(mapper.getClass());
System.out.println(employee);
}finally {
openSession.close();
}
}
@Test
public void test02() throws IOException{
SqlSessionFactory sqlSessionFactory=getSqlSessionFactory();
SqlSession openSession=sqlSessionFactory.openSession();
try {
EmployeeMapperAnnotation mapper=openSession.getMapper(EmployeeMapperAnnotation.class);
Employee empById=mapper.getEmpById(1);
System.out.println(empById);
}finally{
openSession.close();
}
}
/**
* 测试增删改
* 1、mybatis允许增删改直接定义以下类型的返回值(你如果想返回true or false之类的)
* Integer、Long(把影响多少行封装成Integer\Long)、Boolean(影响0行以上true,0行false)
* 2、我们需要手动提交数据openSession.commit();
* @throws IOException
*/
@Test
public void test03() throws IOException{
SqlSessionFactory sqlSessionFactory=getSqlSessionFactory();
//获取到的SqlSession不会自动提交数据,还一个带参数的openSession会自动提交数据
SqlSession openSession=sqlSessionFactory.openSession();
try{
EmployeeMapper mapper=openSession.getMapper(EmployeeMapper.class);
//测试添加
// Employee employee=new Employee(null,"jerry","15032506306@163.com","1");
// mapper.addEmp(employee);
//测试修改、更新
Employee employee=new Employee(1,"yy","17679169423@163.com","1");
boolean updateEmp=mapper.updateEmp(employee);
System.out.println(updateEmp);
//测试删除
// mapper.deleteEmpById(2);
//2.手动提交数据
openSession.commit();
}finally {
openSession.close();
}
}
}
运行结果(目前):
DEBUG 01-25 17:07:23,905 ==> Preparing: select * from tbl_employee where id = ? (BaseJdbcLogger.java:145)
DEBUG 01-25 17:07:23,939 ==> Parameters: 2(Integer) (BaseJdbcLogger.java:145)
DEBUG 01-25 17:07:23,950 <== Total: 0 (BaseJdbcLogger.java:145)
class com.sun.proxy.$Proxy7
null
DEBUG 01-25 17:07:23,981 ==> Preparing: select * from tbl_employee where id=? (BaseJdbcLogger.java:145)
DEBUG 01-25 17:07:23,981 ==> Parameters: 1(Integer) (BaseJdbcLogger.java:145)
DEBUG 01-25 17:07:23,984 <== Total: 1 (BaseJdbcLogger.java:145)
Employee [id=1, lastName=yy, email=17679169423@163.com, gender=1]
DEBUG 01-25 17:07:24,021 ==> Preparing: update tbl_employee set last_Name=?,email=?,gender=? where id=? (BaseJdbcLogger.java:145)
DEBUG 01-25 17:07:24,022 ==> Parameters: yy(String), 17679169423@163.com(String), 1(String), 1(Integer) (BaseJdbcLogger.java:145)
DEBUG 01-25 17:07:24,022 <== Updates: 1 (BaseJdbcLogger.java:145)
true
我想给她买兰博基尼

浙公网安备 33010602011771号