1.數(shù)據(jù)庫新建person表
2.步驟
1)導入jar包
2)配置核心xml文件,開發(fā)環(huán)境及數(shù)據(jù)庫相關信息杠览,及mapper映射文件位置
3)配置映射文件XXXMapper.xml,主要是命名空間容达,操作語句
4)通過構建SqlSessionFactory獲取SqlSession對象衙猪,然后通過使用SqlSeesion對象調用對應的方法實現(xiàn)數(shù)據(jù)庫操作。
3.操作
1)引入相關MyBatis及MySQL連接Jar包及JUnit4包
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>
<!-- 配置開發(fā)環(huán)境-->
<environments default="test">
<environment id="test">
<!-- 事務管理類型:JDBC哑芹、MANAGED -->
<transactionManager type="JDBC"></transactionManager>
<!-- 數(shù)據(jù)源類型: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 設置參數(shù)碴萧,為實體類中的屬性-->
<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); // 創(chuàng)建 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); // 創(chuàng)建 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); // 創(chuàng)建 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); // 創(chuàng)建 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中的映射的對象是 使用下面方法實現(xiàn)的
<!-- 查詢功能,resultType 設置返回值類型 -->
<select id="findAll" resultType="com.capgemini.entity.Person">
SELECT * FROM person
</select>
可以通過實體對象映射盟榴,節(jié)省代碼量
<!--對象映射曹质,type是對象的位置-->
<resultMap id="PersonRM" type="com.capgemini.entity.Person">
<!-- id是主鍵,result是普通字段,property表示實體對象屬性羽德,column是數(shù)據(jù)庫中對應的字段-->
<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宅静,是命名空間章蚣,是用于區(qū)分映射文件中的方法的
每一個sql語句操作都有一個id,對應的是SqlSession方法調用時候命名空間后的方法名,主要有4種sql語句操作類型姨夹,select,insert,update,delete纤垂。
parameterType,是sql語句的輸入?yún)?shù)類型,如果輸入?yún)?shù)是對應的實體類,在sql語句中則是使用#{實體類屬性}來添加匀伏;如果不是則#{隨便的命名}洒忧。
resultType,是sql語句返回的結果集類型够颠,用于簡單類型熙侍,
resultMap,是返回的結果集類型是復雜類型時候使用的,對應的是resultMap標簽所指定的對象映射id
標簽resultMap,其中id是用于sql語句結果集返回時resultMap的位置履磨,type是映射對象蛉抓,id是主鍵,result是普通字段剃诅,property是實體類屬性巷送,column是數(shù)據(jù)庫中對應的字段名
2)調用方式
首先創(chuàng)建SqlSessionFacory對象,使用的是SqlSessionFactoryBuilder().build(inputStream)方法矛辕,其中inputStream可以通過Resources.getResourceAsStream(resource)方法獲取笑跛,resource是核心配置文件位置。
然后獲取SqlSession對象聊品,使用的是sqlSessionFactory飞蹂。openSession()方法。
最后調用mapper中的方法翻屈,增加使用insert,修改使用update,刪除使用delete,查詢使用select陈哑。