上一篇-简单示例
参考说明文档
下一篇-mapper动态代理(基于接口开发)实现CRUD
根据上一篇的示例,在其基础上进一步深化完善增删改查的功能。
personMapper.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">
<!-- 该配置文件的头信息可以查看mybatis的说明文档 -->
<!-- Person类和MySQL中的Person表的映射文件 -->
<!-- namespace相当于该mapper.xml映射文件的唯一标识 -->
<!-- namespace="mapper文件的全路径" -->
<!-- 通过 namespace.id 获取对应的SQL语句 -->
<mapper namespace="org.ltx.entity.personMapper">
<!-- id的值就是给该select取得标识, parameterType:输入参数的类型 resultType的值是该SQL语句的返回结果集类型 -->
<!-- 注意:此处写sql语句不需要打分号 -->
<!-- #{id}就相当于一个占位符 -->
<select id="queryPersonById" parameterType="int" resultType="org.ltx.entity.Person">
select * from person where id = #{id}
</select>
<!-- mybatis约定:输入参数parameterType 和 输出参数 resultType 在形式上只能写一个,如果要传入|返回 多个值,则可以用数组|对象 -->
<!-- 输入参数: 对于简单类型(8个基本类型+String),可以用任意占位符 #{*} 对于对象类型,则必须是对象的属性 #{属性名} -->
<!-- 返回多个值,如果返回类型是一个对象,则无论返回一个值还是返回多个值,在resultType只需要写对象类型即可 -->
<select id="queryAllPerson" resultType="org.ltx.entity.Person">
select * from person
</select>
<insert id="addPerson" parameterType="org.ltx.entity.Person">
insert into person(id,name,age)values(#{id},#{name},#{age})
</insert>
<update id="updatePerson" parameterType="org.ltx.entity.Person">
update person set name=#{name},age=#{age} where id=#{id}
</update>
<delete id="deletePersonById" parameterType="int">
delete from person where id = #{id}
</delete>
</mapper>
测试类 test.jave
package org.ltx.entity;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class test {
//更加学号查询对象
static void queryPersonById(int id) throws IOException{
//1.加载Mybatis配置文件
String resource = "config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
// 2.创建sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream, "development");
// 3.获得session对象,相当于connection,从而操作数据库
SqlSession session = sqlSessionFactory.openSession();
// 4.查询一个对象
String statement = "org.ltx.entity.personMapper." + "queryPersonById";
Person person = session.selectOne(statement, id);
System.out.println(person);
//5.关闭session
session.close();
}
//查询全部对象
static void queryAllPerson() throws IOException{
//1.加载Mybatis配置文件
String resource = "config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
// 2.创建sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream, "development");
// 3.获得session对象,相当于connection,从而操作数据库
SqlSession session = sqlSessionFactory.openSession();
// 4.查询全部对象
String statement = "org.ltx.entity.personMapper." + "queryAllPerson";
List<Person> persons = session.selectList(statement);
System.out.println(persons);
//5.关闭session
session.close();
}
//增加一个对象
static void addPerson(Person person) throws IOException{
//1.加载Mybatis配置文件
String resource = "config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
// 2.创建sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream, "development");
// 3.获得session对象,相当于connection,从而操作数据库
SqlSession session = sqlSessionFactory.openSession();
// 4.增加一个对象
String statement = "org.ltx.entity.personMapper." + "addPerson";
session.insert(statement, person);
//5.transactionManager类型为JDBC方式,需要手动进行事务提交,否则数据库不会更新
session.commit();
System.out.println("增加成功");
//6.关闭session
session.close();
}
//更新对象
static void updatePerson(Person person) throws IOException{
//1.加载Mybatis配置文件
String resource = "config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
// 2.创建sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream, "development");
// 3.获得session对象,相当于connection,从而操作数据库
SqlSession session = sqlSessionFactory.openSession();
// 4.更新对象
String statement = "org.ltx.entity.personMapper." + "updatePerson";
session.update(statement, person);
//5.transactionManager类型为JDBC方式,需要手动进行事务提交,否则数据库不会更新
session.commit();
System.out.println("更新成功");
//6.关闭session
session.close();
}
//删除对象
static void deletePerson(int id) throws IOException{
//1.加载Mybatis配置文件
String resource = "config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
// 2.创建sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream, "development");
// 3.获得session对象,相当于connection,从而操作数据库
SqlSession session = sqlSessionFactory.openSession();
// 4.更新对象
String statement = "org.ltx.entity.personMapper." + "deletePersonById";
session.delete(statement, id);
//5.transactionManager类型为JDBC方式,需要手动进行事务提交,否则数据库不会更新
session.commit();
System.out.println("删除成功");
//6.关闭session
session.close();
}
public static void main(String[] args) throws IOException {
queryPersonById(1001);
queryAllPerson();
Person person = new Person(1003,"ww",21);
addPerson(person);
queryAllPerson();
person = new Person(1003,"wqq",23);
updatePerson(person);
queryAllPerson();
deletePerson(1003);
queryAllPerson();
}
}
注意事项:
参见程序的注释。
事务处理的类型如果设置为JDBC,一定要手工进行提交,否则在程序上显示成功,但是数据库不会更新