Mybatids學習篇二
使用MyBatis對錶執行CRUD操作
1、新增Mybatis的配置檔案conf.xml
2、定義表所對應的實體類,
3、定義操作users表的sql對映檔案userMapper.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,namespace的值習慣上設定成包名+sql對映檔名,這樣就能夠保證namespace的值是唯一的
例如namespace="com.users.mapping.userMapper"就是com.users.mapping(包名)+userMapper(userMapper.xml檔案去除字尾)
-->
<mapper namespace="com.users.mapping.userMapper">
<!-- 在select標籤中編寫查詢的SQL語句, 設定select標籤的id屬性為getUser,id屬性值必須是唯一的,不能夠重複
使用parameterType屬性指明查詢時使用的引數型別,resultType屬性指明查詢返回的結果集型別
resultType="com.User"就表示將查詢結果封裝成一個User類的物件返回
User類就是users表所對應的實體類
-->
<!--
根據id查詢得到一個user物件
-->
<select id="getUser" parameterType="int"
resultType="com.users.Users">
select * from users where id=#{id}
</select>
<!-- 建立使用者(Create) -->
<insert id="addUser" parameterType="com.users.Users">
insert into users(name,age) values(#{name},#{age})
</insert>
<!-- 刪除使用者(Remove) -->
<delete id="deleteUser" parameterType="int">
delete from users where id=#{id}
</delete>
<!-- 修改使用者(Update) -->
<update id="updateUser" parameterType="com.users.Users">
update users set name=#{name},age=#{age} where id=#{id}
</update>
<!-- 查詢全部使用者-->
<select id="getAllUsers" resultType="com.users.Users">
select * from users
</select>
</mapper>
4、定義sql對映的介面
UserMapperI介面的程式碼如下:
package com.users.mapping;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.users.Users;
public interface UserMapperI {
/**
* @author w_little
* 定義sql對映的介面,使用註解指明方法要執行的SQL
*/
//使用@Insert註解指明add方法要執行的SQL
@Insert("insert into users(name, age) values(#{name}, #{age})")
public int add(Users user);
//使用@Delete註解指明deleteById方法要執行的SQL
@Delete("delete from users where id=#{id}")
public int deleteById(int id);
//使用@Update註解指明update方法要執行的SQL
@Update("update users set name=#{name},age=#{age} where id=#{id}")
public int update(Users user);
//使用@Select註解指明getById方法要執行的SQL
@Select("select * from users where id=#{id}")
public Users getById(int id);
//使用@Select註解指明getAll方法要執行的SQL
@Select("select * from users")
public List<Users> getAll();
}
5、在conf.xml檔案中註冊這個對映介面
<mappers>
<mapper resource="com/users/mapping/userMapper.xml"/>
<!-- 註冊UserMapper對映介面-->
<mapper class="com.users.mapping.UserMapperI"/>
</mappers>
6、用到的MyBatisUtil工具類程式碼如下
package com.util;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybatisUtil {
/**
* 獲取SqlSessionFactory
* @return SqlSessionFactory
*/
public static SqlSessionFactory getSqlSessionFactory() {
//mybatis的配置檔案
String resource = "conf.xml";
//使用類載入器載入mybatis的配置檔案(它也載入關聯的對映檔案)
InputStream is = MybatisUtil.class.getClassLoader().getResourceAsStream(resource);
//構建sqlSession的工廠
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
return factory;
}
/**
* 獲取SqlSession
* @return SqlSession
*/
public static SqlSession getSqlSession() {
//建立能執行對映檔案中sql的sqlSession
return getSqlSessionFactory().openSession();
}
/**
* 獲取SqlSession
* @param isAutoCommit
* true 表示建立的SqlSession物件在執行完SQL之後會自動提交事務
* false 表示建立的SqlSession物件在執行完SQL之後不會自動提交事務,這時就需要我們手動呼叫sqlSession.commit()提交事務
* @return SqlSession
*/
public static SqlSession getSqlSession(boolean isAutoCommit) {
return getSqlSessionFactory().openSession(isAutoCommit);
}
}
7、單元測試類的程式碼如下:
package com.user.test;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.users.Users;
import com.users.mapping.UserMapperI;
import com.util.MybatisUtil;
public class Test1 {
@Test
public void testAdd() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
/**
* 得到UserMapperI介面的實現類物件, UserMapperI介面的實現類物件由
* sqlSession.getMapper(UserMapperI.class)動態構建出來
*/
UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
Users user = new Users();
user.setName("使用者zxw");
user.setAge(20);
int add = mapper.add(user);
// 使用SqlSession執行完SQL之後需要關閉SqlSession
sqlSession.close();
System.out.println(add);
}
@Test
public void testUpdate() {
SqlSession sqlSession = MybatisUtil.getSqlSession(true);
/**
* 得到UserMapperI介面的實現類物件
* mUserMapperI介面的實現類物件由sqlSession.getMapper(UserMapperI.class)動態構建出來
*/
UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
Users user = new Users();
user.setId(1);
user.setName("使用者lxw");
user.setAge(56);
// 執行修改操作
int retResult = mapper.update(user);
// 使用SqlSession執行完SQL之後需要關閉SqlSession
sqlSession.close();
System.out.println(retResult);
}
@Test
public void testDelete() {
SqlSession sqlSession = MybatisUtil.getSqlSession(true);
/**
* 得到UserMapperI介面的實現類物件
* mUserMapperI介面的實現類物件由sqlSession.getMapper(UserMapperI.class)動態構建出來
*/
UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
// 執行刪除操作
int retResult = mapper.deleteById(7);
// 使用SqlSession執行完SQL之後需要關閉SqlSession
sqlSession.close();
System.out.println(retResult);
}
@Test
public void testGetUser() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
// 得到UserMapperI介面的實現類物件,UserMapperI介面的實現類物件由sqlSession.getMapper(UserMapperI.class)動態構建出來
UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
// 執行查詢操作,將查詢結果自動封裝成User返回
Users user = mapper.getById(8);
// 使用SqlSession執行完SQL之後需要關閉SqlSession
sqlSession.close();
System.out.println(user);
}
@Test
public void testGetAll() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
// 得到UserMapperI介面的實現類物件,UserMapperI介面的實現類物件由sqlSession.getMapper(UserMapperI.class)動態構建出來
UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
// 執行查詢操作,將查詢結果自動封裝成List<User>返回
List<Users> lstUsers = mapper.getAll();
// 使用SqlSession執行完SQL之後需要關閉SqlSession
sqlSession.close();
System.out.println(lstUsers);
}
}