MyBatis配置文件增刪查改解析及手動映射操作

主配置文件 mybatis-config.xml

   在項目的 src (類路徑 classpath) 下面創建 配置文件 mybatis-config.xml
  具體配置可參考mybatis的官方文檔

  <!-- xml 約束,約束下面可以使用那些標籤 (元素)-->
<?xml version="1.0" encoding="UTF-8" ?><!-- xml聲明,固定語法 -->
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">

  
  
  <!-- 
  	開啓Mybatis的配置
  	<configuration> 根元素,任何html文件都有一個根元素
   -->
<configuration>

	<!--  讀取數據庫配置文件 -->
	<properties resource="db.properties"/>
	
	<!-- 設置 -->
	<settings> 
		<!-- 開啓支持駝峯命名法 -->
		 <setting name="mapUnderscoreToCamelCase" value="true"/> 
		
	 </settings>

	<!-- 配置別名 -->
		<typeAliases>
			<!-- 配置單個別名 -->
			<typeAlias type="com.ywq.mybatis.pojo.User" alias="User"/>
			
			<!-- 使用包掃描配置別名,包下面所有pojo類都回設置別名,簡單類名首字母變小寫(不區分大小寫) -->
			<package name="com.ywq.mybatis.pojo"/>
		</typeAliases>
	
	<!-- 
		配置Mybatis的環境
		<environments default="mysql">
			default:默認的環境,值就是內部<environment id="mysql">的id值
	 -->
  <environments default="mysql">
  
  	<!-- 	
		具體環境標識
		<environment id="mysql">
			id:當前環境唯一標識 見名知意
	 -->
    <environment id="mysql">
    
    	<!-- 事務管理器(操作數據庫有事務概念),使用默認JDBC (MyBatis底層就是封裝原生JDBC)事務 -->
      <transactionManager type="JDBC"/>
      
      <!-- 配置數據域(連接池)
      		<dataSource type="POOLED">
      			type:數據域類型POOLED,MyBatis內置的一個數據域
      			使用框架開發連接數據全部都是使用數據源連接,使用阿里巴巴連接池,Apache的DBCP連接池(和Spring框架集成詳細配置)
       -->
      <dataSource type="POOLED">
      
     	 <!-- 數據庫驅動 -->
        <property name="driver" value="${driverClassName}"/>
        <!-- 連接數據庫url地址 -->
        <property name="url" value="${url}"/>
        <!-- 數據庫賬號 -->
        <property name="username" value="${username}"/>
        <!-- 數據庫密碼 -->
        <property name="password" value="${password}"/>
        
      </dataSource>
    </environment>
  </environments>
  
  <!-- 配置MyBatis的映射文件 -->
  <mappers>
    <mapper resource="com/ywq/mybatis/mapper/UserMapper.xml"/>
  </mappers>
</configuration>

獲取Session代碼塊文件

package com.ywq.mybatis.util;

import java.io.IOException;
import java.io.InputStream;

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 MyBatisUtils {
	private MyBatisUtils() {}
	
	private static SqlSessionFactory factory;
	
	//只運行一次
	static{
		String resource = "mybatis-config.xml";
		
		try(InputStream	inputStream = Resources.getResourceAsStream(resource);){
			 factory = new SqlSessionFactoryBuilder().build(inputStream);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	//獲得openSession
	public static SqlSession openSession() {
		SqlSession openSession = factory.openSession();
		return openSession;
	}
	
	
}

pojo類代碼

package com.ywq.mybatis.pojo;

public class User {
	private Integer uId ;
	private String uName;
	private String uPassword;
	private Integer uAge;
	
	
	public User() {
		super();
	}
	public User(Integer uId, String uName, String uPassword, Integer uAge) {
		super();
		this.uId = uId;
		this.uName = uName;
		this.uPassword = uPassword;
		this.uAge = uAge;
	}
	public Integer getuId() {
		return uId;
	}
	public void setuId(Integer uId) {
		this.uId = uId;
	}
	public String getuName() {
		return uName;
	}
	public void setuName(String uName) {
		this.uName = uName;
	}
	public String getuPassword() {
		return uPassword;
	}
	public void setuPassword(String uPassword) {
		this.uPassword = uPassword;
	}
	public Integer getuAge() {
		return uAge;
	}
	public void setuAge(Integer uAge) {
		this.uAge = uAge;
	}
	@Override
	public String toString() {
		return "User [uId=" + uId + ", uName=" + uName + ", uPassword=" + uPassword + ", uAge=" + uAge + "]";
	}
	
	
}

Mapper接口

package com.ywq.mybatis.mapper;

import java.util.List;

import com.ywq.mybatis.pojo.User;


/*
 *mybatis的映射接口
 * */
public interface UserMapper {
		
	// DML :增刪改
	
	int insert(User user);
	
	int deleteByPrimaryKey(Integer id);
	
	int updateByPrimaryKey(User user);
	
	//DQL : 查詢
	User selectByPrimaryKey(Integer id);
	
	List<User> selectLits();
}

Mapper.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的User表的y映射配置
  <mapper namespace="">
  映射文件的根元素
  namespace:命名空間(映射文件的唯一名稱)
  	值:必須對應映射接口的全限定名
  		全限定名 = 包名+簡單名稱
  		
   -->
<mapper namespace="com.ywq.mybatis.mapper.UserMapper">
  
  <!-- 插入數據 
  	<insert id="" parameterType="">
  	id:當前操作功能的唯一標識,值必須和映射接口對應的方法名相同
  	parameterType:參數類型,必須和映射接口對應的方法的參數類型相同(全限定名)
  	keyColumn="數據表對應的主鍵列" 
  	keyProperty="pojo對象對應的主鍵列的屬性" 
  	useGeneratedKeys="true"  是否返回自動生成的主鍵key
  -->
  
  <insert id="insert" parameterType="User"
  keyColumn="id" keyProperty="uId" useGeneratedKeys="true" 
  >
  <!-- 
  		#{xxx}:OGNL語法
  		xxx:如果參數是對象或者map集合,xxx就是對象的屬性或者map的key
   -->
	insert into user (Name,Password,Age)values(#{uName},#{uPassword},#{uAge})
  </insert>
  
  <!-- 修改功能 -->
  <update id="updateByPrimaryKey" parameterType="User">
	update user set name = #{uName},password=#{uPassword},age=#{uAge} where id =#{uId}  	
  </update>
  
  <!-- 刪除功能 -->
  <delete id="deleteByPrimaryKey" parameterType="Integer">
    <!-- 
  		#{xxx}:OGNL語法
  		xxx:如果方法參數是值類型(string+基本數據類型以及包裝類型),並且參數只有一個的情況,
  			xxx底層直接將值設置到這一參數上,和xxx名稱沒有關係,xxx理論上可以隨便寫,一般見名知意
   -->
  	delete from user where id = #{id}
  </delete>
  
  <!-- 單行查詢 -->
  <!-- resultType : 返回的數據類型,必須和映射接口對應的方法的返回數據類型相同(全限定名) -->
  <select id="selectByPrimaryKey" parameterType="Integer" resultMap="user_map">
  select id u_id,name u_name,password u_password,age u_age from user where id = #{id}
  </select>
  
   <!-- 手動映射標籤
  	<resultMap type="" id="">
  	type:要映射的pojo類型(全限定名)
  	id:唯一標識
  	-->
  	<resultMap type="com.ywq.mybatis.pojo.User" id="user_map">
  	
  	<!-- 主鍵映射
  	<id column="" property="" javaType="" jdbcType="" />
  		column="查詢結果集列名"
  		property="pojo對應屬性名稱"
  		javaType="pojo對應的java數據類型【可不寫,自動匹配】"
  		jdbcType="數據表列對應的類型【可不寫,自動匹配】"
  	 -->
  	<id column="u_id" property="uId" javaType="Integer" jdbcType="INTEGER" />
  	<!-- 非主鍵映射 -->
  	<result column="u_name" property="uName" javaType="String" jdbcType="VARCHAR"/>
  	<result column="u_password" property="uPassword" />
  	<result column="u_age" property="uAge" />
  	</resultMap>
  
  
  
  
  <!-- 多行查詢 -->
  <!-- <select id="" resultType="">
  	resultType : 無論單行或多行查詢,返回的數據類型都是對應的pojo數據類型
   -->
  <select id="selectLits" resultType="user">
  	select id u_id,name u_name,password u_password,age u_age from user
  </select>
  
</mapper>

測試代碼

package com.ywq.mybatis.test;

import static org.junit.Assert.*;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import com.ywq.mybatis.mapper.UserMapper;
import com.ywq.mybatis.pojo.User;
import com.ywq.mybatis.util.MyBatisUtils;

public class MyBatisTest {
	
	@Test
	public void testInert() throws Exception {
		
		//1.創建SqlSession對象
		SqlSession session = MyBatisUtils.openSession();
		//2.創建UserMapper映射接口的動態代理對象
		UserMapper userMapper = session.getMapper(UserMapper.class);
		System.out.println(userMapper.getClass().getName());
		
		//3.執行insert方法
		User user = new User(null, "jocn", "2020", 33);
		
		int row = userMapper.insert(user);
		System.out.println("受影響的行數:"+row);
		//4.MyBatis默認需要手動提交事務
		session.commit();
		
		//5.關閉session(釋放資源)
		session.close();
	}
	
	@Test
	public void testUpdate() throws Exception {
		
		//1.創建SqlSession對象
		SqlSession session = MyBatisUtils.openSession();
		
		//2.創建UserMapper映射接口的動態對立對象
		UserMapper mapper = session.getMapper(UserMapper.class);
		
		//3.執行修改方法
		
		User user = new User(6, "fg邦", "5161", 25);
		int row = mapper.updateByPrimaryKey(user);
		
		System.out.println("受影響行數"+row);
		
		//4.MyBatis默認需要手動提交事務
		session.commit();
		
		//5.關閉session(釋放資源)
		session.close();
		
	}
	
	@Test
	public void testDelete() throws Exception {
		
		//1.創建SqlSession對象
		SqlSession session = MyBatisUtils.openSession();
		
		//2.創建UserMapper映射接口的動態對立對象
		UserMapper mapper = session.getMapper(UserMapper.class);
		
		//3.執行刪除方法
		
		int row = mapper.deleteByPrimaryKey(10);
		
		System.out.println("受影響行數"+row);
		
		//4.MyBatis默認需要手動提交事務
		session.commit();
		
		//5.關閉session(釋放資源)
		session.close();
		
	}
	
	@Test
	public void testSelectOne() throws Exception {
		
		//1.創建SqlSession對象
		SqlSession session = MyBatisUtils.openSession();
		
		//2.創建UserMapper映射接口的動態對立對象
		UserMapper mapper = session.getMapper(UserMapper.class);
		
		//3.執行單行查詢方法
		
		User user = mapper.selectByPrimaryKey(5);
		
		System.out.println(user);
		
		//4.MyBatis默認需要手動提交事務
		session.commit();
		
		//5.關閉session(釋放資源)
		session.close();
		
	}
	
	@Test
	public void testSelectList() throws Exception {
		
		//1.創建SqlSession對象
		SqlSession session = MyBatisUtils.openSession();
		
		//2.創建UserMapper映射接口的動態對立對象
		UserMapper mapper = session.getMapper(UserMapper.class);
		
		//3.執行多行查詢方法
		
		List<User> users = mapper.selectLits();
		for (User user : users) {
			System.out.println(user);
			
		}
		
		//4.MyBatis默認需要手動提交事務
		session.commit();
		
		//5.關閉session(釋放資源)
		session.close();
		
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章