主配置文件 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();
}
}