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();
}
}
还没有评论,来说两句吧...