1.数据库新建person表
数据库person
2.步骤
1)导入jar包
2)配置核心xml文件,开发环境及数据库相关信息,及mapper映射文件位置
3)配置映射文件XXXMapper.xml,主要是命名空间,操作语句
4)通过构建SqlSessionFactory获取SqlSession对象,然后通过使用SqlSeesion对象调用对应的方法实现数据库操作。
3.操作
1)引入相关MyBatis及MySQL连接Jar包及JUnit4包
相关jar包
2)新建Person实体类
package com.capgemini.entity;
/**
* 实体类
*/
public class Person {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
3)MyBatis核心配置文件sqlMapperConfig.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>
<!-- 配置开发环境-->
<environments default="test">
<environment id="test">
<!-- 事务管理类型:JDBC、MANAGED -->
<transactionManager type="JDBC"></transactionManager>
<!-- 数据源类型:POOLED、UNPOOLED、JNDI -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 mapper -->
<mappers>
<!--路径使用"/"-->
<mapper resource="com/capgemini/mapper/PersonMapper.xml"></mapper>
</mappers>
</configuration>
4)映射文件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">
<mapper namespace="com.capgemini.mapper.PersonMapper">
<!-- 查询功能,resultType 设置返回值类型 -->
<select id="findAll" resultType="com.capgemini.entity.Person">
SELECT * FROM person
</select>
<!--增加功能,parameterType 设置参数,为实体类中的属性-->
<insert id="insert" parameterType="com.capgemini.entity.Person">
INSERT INTO person(id,name,age) VALUES (#{id},#{name},#{age})
</insert>
<!--修改功能-->
<update id="update" parameterType="com.capgemini.entity.Person">
UPDATE person SET name = #{name},age = #{age}
WHERE id = #{id}
</update>
<!--删除-->
<delete id="delete" parameterType="com.capgemini.entity.Person">
DELETE person WHERE id = #{id}
</delete>
</mapper>
5)测试
package com.capgemini.test;
import com.capgemini.entity.Person;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class TestMyBatis {
@Test
public void Test01() throws IOException {
/**
* 1、获得 SqlSessionFactory
* 2、获得 SqlSession
* 3、调用在 mapper 文件中配置的 SQL 语句
*/
String resource = "sqlMapperConfig.xml"; // 定位核心配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 创建 SqlSessionFactory
SqlSession sqlSession = sqlSessionFactory.openSession(); // 获取到 SqlSession
// 调用 mapper 中的方法:命名空间 + id
List<Person> personList = sqlSession.selectList("com.capgemini.mapper.PersonMapper.findAll");
for (Person p : personList){
System.out.println(p);
}
}
@Test
public void Test02() throws IOException {
String resource = "sqlMapperConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 创建 SqlSessionFactory
SqlSession sqlSession = sqlSessionFactory.openSession(); // 获取到 SqlSession
Person person = new Person();
person.setId(2);
person.setName("Echo");
person.setAge(25);
// 调用 mapper 中的方法:命名空间 + id
sqlSession.insert("com.capgemini.mapper.PersonMapper.insert",person);
sqlSession.commit();
}
@Test
public void Test03() throws IOException {
String resource = "sqlMapperConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 创建 SqlSessionFactory
SqlSession sqlSession = sqlSessionFactory.openSession(); // 获取到 SqlSession
Person person = new Person();
person.setId(2);
person.setName("Echo");
person.setAge(26);
// 调用 mapper 中的方法:命名空间 + id
sqlSession.update("com.capgemini.mapper.PersonMapper.update",person);
sqlSession.commit();
}
@Test
public void Test04() throws IOException {
String resource = "sqlMapperConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 创建 SqlSessionFactory
SqlSession sqlSession = sqlSessionFactory.openSession(); // 获取到 SqlSession
Person person = new Person();
person.setId(2);
person.setName("Echo");
person.setAge(26);
// 调用 mapper 中的方法:命名空间 + id
sqlSession.delete("com.capgemini.mapper.PersonMapper.delete",person);
sqlSession.commit();
}
}
4.其他
在PersonMapper.xml中的映射的对象是 使用下面方法实现的
<!-- 查询功能,resultType 设置返回值类型 -->
<select id="findAll" resultType="com.capgemini.entity.Person">
SELECT * FROM person
</select>
可以通过实体对象映射,节省代码量
<!--对象映射,type是对象的位置-->
<resultMap id="PersonRM" type="com.capgemini.entity.Person">
<!-- id是主键,result是普通字段,property表示实体对象属性,column是数据库中对应的字段-->
<id property="id" column="id"></id>
<result property="name" column="name"></result>
<result property="age" column="age"></result>
</resultMap>
<!-- 查询功能,resultMap 通过对象映射,设置返回值类型 -->
<select id="findAll" resultMap="PersonRM">
SELECT * FROM person
</select>
5.分析
1)首先是映射文件
namespace,是命名空间,是用于区分映射文件中的方法的
每一个sql语句操作都有一个id,对应的是SqlSession方法调用时候命名空间后的方法名,主要有4种sql语句操作类型,select,insert,update,delete。
parameterType,是sql语句的输入参数类型,如果输入参数是对应的实体类,在sql语句中则是使用#{实体类属性}来添加;如果不是则#{随便的命名}。
resultType,是sql语句返回的结果集类型,用于简单类型,
resultMap,是返回的结果集类型是复杂类型时候使用的,对应的是resultMap标签所指定的对象映射id
标签resultMap,其中id是用于sql语句结果集返回时resultMap的位置,type是映射对象,id是主键,result是普通字段,property是实体类属性,column是数据库中对应的字段名
2)调用方式
首先创建SqlSessionFacory对象,使用的是SqlSessionFactoryBuilder().build(inputStream)方法,其中inputStream可以通过Resources.getResourceAsStream(resource)方法获取,resource是核心配置文件位置。
然后获取SqlSession对象,使用的是sqlSessionFactory。openSession()方法。
最后调用mapper中的方法,增加使用insert,修改使用update,删除使用delete,查询使用select。
网友评论