Mybatis快速入门(2)Dao封装-属性加载:抽取JDBC-别名的配置-映射器(mappers)

一、需求

根据用户ID查询用户信息
根据用户名查找用户列表
添加用户

二、原始Dao的开发方式

1、创建Dao/UserDao接口

在这里插入图片描述

package com.itzheng.mybatis.dao;
import java.util.List;
import com.itzheng.mybatis.pojo.User;
public interface UserDao {
    
    

	// 根据用户ID查询用户信息
	/*
	 * 用户信息持化接口
	 */
	User getUserById(Integer id);

	// 根据用户名查找用户列表
	List<User> getUserByUserName(String userName);

	// 添加用户
	void insertUser(User user);

}

2、创建接口对应的实现类

在这里插入图片描述

public class UserDaoImpl implements UserDao {
    
    

	@Override
	public User getUserById(Integer id) {
    
    
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		User user = sqlSession.selectOne("user.getUserByid", id);
		sqlSession.close();
		return user;
	}

	@Override
	public List<User> getUserByUserName(String userName) {
    
    
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		List<User> selectList = sqlSession.selectList("user.getUserByUserName", userName);
		sqlSession.close();
		return selectList;
	}
	@Override
	public void insertUser(User user) {
    
    
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession(true);// true自动提交
		sqlSession.insert("user.insertUser", user);
		sqlSession.close();

	}
}

3、创建单元测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(1)通过id查询用户

在这里插入图片描述

@Test
	public void testGetUserById() {
    
    
		UserDao userDao = new UserDaoImpl();
		User user = userDao.getUserById(30);
		System.out.println(user);
	}
(2)通过name查询用户

在这里插入图片描述

@Test
	public void testGetUserByUserName() {
    
    
		UserDao userDao = new UserDaoImpl();
		List<User> userByUserName = userDao.getUserByUserName("张");
		for (User user : userByUserName) {
    
    
			System.out.println(user);
		}
	}

在这里插入图片描述

(3)插入用户

在这里插入图片描述

	@Test
	public void testInsertUser() {
    
    
		UserDao userDao = new UserDaoImpl();
		User user = new User();
		user.setUsername("张飞1111");
		user.setSex("2");
		user.setBirthday(new Date());
		user.setAddress("深圳黑马");
		userDao.insertUser(user);
	}

在这里插入图片描述
在这里插入图片描述

三、官方推荐,接口动态代理

通过动态代理的方式有实现类但是不需要自己手动去写

1、创建UserMapper接口

在这里插入图片描述

package com.itzheng.mybatis.mapper;

import java.util.List;

import com.itzheng.mybatis.pojo.User;

public interface UserMapper {
    
    

	// 根据用户ID查询用户信息
	/*
	 * 用户信息持化接口
	 */
	User getUserByid(Integer id);

	// 根据用户名查找用户列表
	List<User> getUserByUserName(String userName);

	// 添加用户
	void insertUser(User user);

}

2、创建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">
<!-- namespace:命名空间,用于隔离SQL语句,后继有重要 #{}:是一个占位符,相当于jdbc的?号 用字符串拼接指令${}:字符串拼接指令,如果入参为普通数据类型{}内部只能写value -->
<!-- 动态代理开发规则:
	1、namespace:必须是接口的全路径名
	2、接口的方法名必须与SQL的id一致
	3、接口的入参与parameterType类型一致
	4、接口的返回值必须与resultType类型一致
 -->
<mapper namespace="com.itzheng.mybatis.mapper.UserMapper">
	<!-- id:sql语句的唯一标识 parameterType:入参的数据类型 resultType:返回结果的数据类型 -->
	<select id="getUserByid" parameterType="int"
		resultType="com.itzheng.mybatis.pojo.User">
		SELECT * FROM USER WHERE id = #{id1}
	</select>
	<!-- resultType:如果返回结果为集合,只需要设置为每一个数据类型 -->
	<select id="getUserByUserName" parameterType="string"
		resultType="com.itzheng.mybatis.pojo.User">

		SELECT id,username,birthday,sex,address FROM `user` WHERE username LIKE
		'%${value}%'

	</select>

	<!-- 插入用户 -->
	<!-- useGeneratedKeys:使用自增 keyProperty与之配套使用,这里是keyProperty的主键 -->
	<insert id="insertUser"
		parameterType="com.itzheng.mybatis.pojo.User" useGeneratedKeys="true"
		keyProperty="id">
		<!-- selectKey :主键返回 keyProperty:user中的主键属性 resultType:主键的数据类型 order:指定selectKey何时执行,AFTER之后,也就是在插入数据之后执行查询语句返回int类型的最后一行,赋值到User当中的ID选择 -->
		<!-- <selectKey keyProperty="id" resultType="int" order="AFTER" > select 
			LAST_INSERT_ID() </selectKey> -->

		INSERT INTO USER
		(`username`,
		`birthday`,
		`sex`,
		`address`)
		VALUES (#{username},
		#{birthday},
		#{sex},
		#{address});
	</insert>
</mapper>

3、修改SqlMapConfig.xml当中添加映射文件

在这里插入图片描述

<mapper resource="mybatis/UserMapper.xml" />

4、创建单元测试

在这里插入图片描述
在这里插入图片描述

(1)根据ID查询用户

在这里插入图片描述

	@Test
	public void testGetUserById() {
    
    

		SqlSession openSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		// 获取接口的代理实现类
		UserMapper userMapper = openSession.getMapper(UserMapper.class);

		User user = userMapper.getUserByid(30);

		System.out.println(user);

		openSession.close();
	}

在这里插入图片描述

(2)根据name查询用户

在这里插入图片描述

@Test
	public void testGetUserByUserName() {
    
    
		SqlSession openSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
		// 获取接口的代理实现类
		UserMapper userMapper = openSession.getMapper(UserMapper.class);

		List<User> list = userMapper.getUserByUserName("张");

		for (User user : list) {
    
    
			System.out.println(user);
		}
		openSession.close();

	}
(3)插入用户

在这里插入图片描述

@Test
	public void testInsertUser() {
    
    
		SqlSession openSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession(true);
		// 获取接口的代理实现类
		UserMapper userMapper = openSession.getMapper(UserMapper.class);
		
		User user = new User();
		user.setUsername("张飞1111");
		user.setSex("2");
		user.setBirthday(new Date());
		user.setAddress("深圳黑马");
		userMapper.insertUser(user);
		
		openSession.close();
		
	}

在这里插入图片描述

四、属性加载:抽取JDBC

1、创建jdbc.properties

在这里插入图片描述

2、修改SqlMapConfig.xml,在SqlMapConfig.xml当中引入jdbc.properties

在这里插入图片描述

<?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>
	<!-- 先加载内部标签,再加载外部文件,名称一致的时候,会替换内容 -->
	<properties resource="jdbc.properties" >
		<property name="jdbc.username" value="root"/>
		<property name="jdbc.password" value="root"/>
	</properties>
	<!-- 和spring整合后 environments配置将废除 -->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理 -->
			<transactionManager type="JDBC" />
			<!-- 数据库连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driver}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
			</dataSource>
		</environment>
	</environments>
	<!-- 加载映射文件 -->
	<mappers>
		<mapper resource="mybatis/user.xml" />
		<mapper resource="mybatis/UserMapper.xml" />
	</mappers>
</configuration>

五、别名的配置:typeAliases

别名的作用将复杂的数据用其他的名称简单的代替

1、mybatis支持的别名:

在这里插入图片描述
在这里插入图片描述

2、自定义别名:方式一,配置对应的类的别名

(1)修改SqlMapConfig.xml

在这里插入图片描述

<typeAliases>
	<!-- 单个别名定义 -->
	<!-- <typeAlias type="com.itheima.mybatis.pojo.User" alias="user"/> -->
	<!-- 别名包扫描器(推荐使用此方式),整个包下的类都被定义别名,别名为类名,不区分大小写-->
	<package name="com.itzheng.mybatis.pojo"/>
</typeAliases>
(2)修改UserMapper.xml,在UserMapper.xml当中引用别名:别名不区分大小写

在这里插入图片描述

	<select id="getUserByUserName" parameterType="string"
		resultType="user">
		SELECT id,username,birthday,sex,address FROM `user` WHERE username LIKE
		'%${value}%'
	</select>

3、自定义别名:方式二,配置包别名,默认别名就是类名称不区分大小写

(1)修改SqlMapConfig.xml:别名包扫描器:别名是类的全称,不区大小写

在这里插入图片描述

<package name="com.itzheng.mybatis.pojo"  />
(2)UserMapper.xml当中直接使用类名就OK

在这里插入图片描述

六、映射器(mappers)

Mapper配置的几种方式:
在这里插入图片描述

1、将UserMapper.xml复制到mapper文件下

2、修改SqlMapConfig.xml:方式一:类配置

1、接口文件必须与映射文件在同一个目录下
2、接口文件的名称必须与映射文件的名称一致
在这里插入图片描述

<package name="com.itzheng.mybatis.mapper"/>

3、修改SqlMapConfig.xml:方式二:包扫描->推荐

1、接口文件必须与映射文件在同一个目录下
2、接口包文件的名称必须与映射文件的名称一致
在这里插入图片描述

<package name="com.itzheng.mybatis.mapper"/>

猜你喜欢

转载自blog.csdn.net/qq_44757034/article/details/113404672
今日推荐