增删改查操作对于我们程序员来说是最基本也是最重要的操作.那么在Mybatis框架下如何对jdbc中的数据进行增删改查操作?
首先,在介绍之前,我们先来了解一下我们在进行增删改查操作过程中会遇到的各种属性和重要方法:
属性
1.namespace:
称为命名空间,用来将dao与Mapper进行绑定,namespace中的值要与所需dao的目录一致
栗子:
比如我们创建了一个com.ffyc.mybatisdemo.dao包下的一个AdminDao,那么我们在进行绑定时就必须保证与所需目录一致.如下所示,这样我们就通过namespace将dao与Mapper进行了绑定.
<mapper namespace="com.ffyc.mybatisdemo.dao.AdminDao">
</mapper>
2.id:
命名空间下的唯一标识符,其中的值为namespace中对应的接口中的方法名称
栗子:
例如我们在AdminDao接口中创建了一个抽象方法Admin findAdminById(int id); ,那么我们就需要在id中传入所需的方法名.
<select id="findAdminById" parameterType="int" resultType="Admin">
select * from admin where id = #{id}
</select>
3.resultType:
SQL执行语句的返回值类型.
-
当返回值为对象或者对象的集合时,填写该对象的全限定名(包名+类名)
-
当返回值为字符串或者整数类型时,填写对应的类型.如: String,Integer
注:
此处可以填写对应类型名java.lang.Integer,也可以填写int.因为Mybatis在jar包中为这些字符串和常用类型定义了别名.我们可以通过在jar包中查找源码验证:
栗子:
1.比如我们要通过id查询Admin,返回的是一个Admin对象,因此我们需要填入对象的类名
<select id="findAdminById" resultType="Admin">
select * from admin where id = #{id}
</select>
2.比如我们需要查询表中Admin对象的数量,返回的是一个数值,因此我们需要传入对应的类型
<select id="findAdminCount" resultType="java.lang.Integer">
select count(*) from admin
</select>
4.parameterType:
dao接口中方法的参数数据类型.其值为java数据类型全限定名(包名+类名)或Mybatis中定义的别名
栗子:
<select id="findAdminById" parameterType="int" resultType="Admin">
select * from admin where id = #{id}
</select>
方法:
此处有一个方法需要特别注意:
commmit();
此方法为向数据库提交事物.
在Mybatis中默认将commit()的值改为了false,即在执行完SQL后不会自动向数据库提交事物.我们在进行查询操作时,因为不涉及提交事物,因此不用编写.但是在进行数据的增加,修改,删除时,一定要记得手动加上sqlSession.commit()提交事物;否则只是在idea中执行了语句,而没有在数据库接收到事物,因此中真正执行.
栗子:
@Test
//保存
public void saveADmin() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
Admin admin = new Admin("ls", "111","女");
int res = adminDao.saveAdmin(admin);
System.out.println(res);
sqlSession.commit(); //提交数据库事物
sqlSession.close();
}
接下来我们来进行Mybatis的增删改查操作介绍:
1.首先,我们要在数据库中创建好表,并存入基本数据,此处不再进行演示
2.创建对应的对象,及所需get(),set(),toString()方法:
package com.ffyc.mybatisdemo.model;
public class Admin {
private int id;
private String account;
private String password;
private String xb;
private String adminPhone;
public String getXb() {
return xb;
}
public void setXb(String xb) {
this.xb = xb;
}
public String getAdminPhone() {
return adminPhone;
}
public void setAdminPhone(String adminPhone) {
this.adminPhone = adminPhone;
}
public Admin() {
System.out.println("Admin无参构造");
//此处无参构造必须编写
}
public Admin(String account, String password, String gender) {
this.account = account;
this.password = password;
this.xb = gender;
}
public int getId() {
return id;
}
public void setId(int id) {
System.out.println("SetId");
this.id = id;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "Admin{" +
"id=" + id +
", account='" + account + '\'' +
", password='" + password + '\'' +
", xb='" + xb + '\'' +
", adminPhone='" + adminPhone + '\'' +
'}';
}
}
3.接下来编写dao
package com.ffyc.mybatisdemo.dao;
import com.ffyc.mybatisdemo.model.Admin;
import org.apache.ibatis.annotations.Param;
public interface AdminDao {
//此处int返回的值是操作的行数
int saveAdmin(Admin admin);
int updateAdmin(Admin admin);
int deleteAdmin(int id);
int findAdminCount();
}
4.编写mapper
<?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.ffyc.mybatisdemo.dao.AdminDao">
<insert id="saveAdmin" parameterType="Admin" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
insert into admin (account,password,gender)values (#{account},#{password},#{gender})
</insert>
<update id="updateAdmin" parameterType="Admin">
update admin set account=#{account},password=#{password}
where id=#{id}
</update>
<delete id="deleteAdmin" parameterType="Admin">
delete from admin where id = #{id}
</delete>
<select id="findAdminCount" resultType="java.lang.Integer">
select count(*) from admin
</select>
</mapper>
5.编写测试类
package com.ffyc.mybatisdemo.test;
import com.ffyc.mybatisdemo.dao.AdminDao;
import com.ffyc.mybatisdemo.model.Admin;
import com.ffyc.mybatisdemo.util.MybatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.io.IOException;
public class Test2 {
@Test
//新增
public void saveADmin() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
Admin admin = new Admin("ls", "111","女");
int res = adminDao.saveAdmin(admin);
System.out.println(res);
sqlSession.commit(); //提交数据库事物
sqlSession.close();
}
@Test
//修改
public void updateADmin() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
Admin admin = new Admin("zz", "111","女");
admin.setId(4);
int res = adminDao.updateAdmin(admin);
System.out.println(res);
sqlSession.commit(); //提交数据库事物
sqlSession.close();
}
@Test
//删除
public void deleteADmin() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
int res = adminDao.deleteAdmin(5);
System.out.println(res);
sqlSession.commit(); //提交数据库事物
sqlSession.close();
}
}