Mybatis 第二天

原始dao开发方法

1。创建User实体类. 实现get和set方法

public class User {
	
	//属性名和数据库表的字段对应
	private int id;
	private String username;// 用户姓名
	private String sex;// 性别
	private Date birthday;// 生日
	private String address;// 地址
	}

2.创建dao接口

/*
 * dao接口,用户管理
 */
public interface UserDao {
	 
		//根据id查询用户信息
	public User findUserById(int id) throws Exception;
	
	//根据用户名列查询用户列表
	public List<User> findUserByName(String name) throws Exception;
	
	//添加用户信息
	public void insertUser(User user) throws Exception;
	
	//删除用户信息
	public void deleteUser(int id) throws Exception;
	
}

3.创建dao接口的实现类

public class UserDaoImpl implements UserDao {

	// 需要向dao实现类中注入SqlSessionFactory
	// 这里通过构造方法注入
	private SqlSessionFactory sqlSessionFactory;

	public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
		this.sqlSessionFactory = sqlSessionFactory;
	}

	@Override
	public User findUserById(int id) throws Exception {
		SqlSession sqlSession = sqlSessionFactory.openSession();

		User user = sqlSession.selectOne("test.findUserById", id);

		// 释放资源
		sqlSession.close();

		return user;

	}
	
	@Override
	public List<User> findUserByName(String name) throws Exception {
		SqlSession sqlSession = sqlSessionFactory.openSession();

		List<User> list = sqlSession.selectList("test.findUserByName", name);

		// 释放资源
		sqlSession.close();

		return list;
	}
	

	@Override
	public void insertUser(User user) throws Exception {
		SqlSession sqlSession = sqlSessionFactory.openSession();

		//执行插入操作
		sqlSession.insert("test.insertUser", user);

		// 提交事务
		sqlSession.commit();

		// 释放资源
		sqlSession.close();

	}

	@Override
	public void deleteUser(int id) throws Exception {
		SqlSession sqlSession = sqlSessionFactory.openSession();

		//执行插入操作
		sqlSession.delete("test.deleteUser", id);

		// 提交事务
		sqlSession.commit();

		// 释放资源
		sqlSession.close();

	}

4.创建一个User.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进行分类华管理 注意:使用mapper代理方法开发,namespace有特殊重要的作用 -->
<mapper namespace="test">
	<!-- 在映射文件中配置很多sql语句 -->
	<!-- 需求:通过id查询用户表的记录 #{}表示一个占位符 parameterType指定输入参数的类型 #{id} 其中的id表示输入输出参数,参数名称就是id, -->

	<select id="findUserById" parameterType="int" resultType="com.dc.mybatis.po.User">
		select *from user where id=#{id}
	</select>
	
	<select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.mybatis.po.User">
		SELECT * FROM USER WHERE username LIKE '%${value}%'
	</select>
	

	<insert id="insertUser" parameterType="cn.itcast.mybatis.po.User">

		<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
			SELECT
			LAST_INSERT_ID()
		</selectKey>
		insert into user(username,birthday,sex,address)
		value(#{username},#{birthday},#{sex},#{address})
	</insert>

	<!-- 删除 用户 根据id删除用户,需要输入 id值 -->
	<delete id="deleteUser" parameterType="java.lang.Integer">
		delete from user where
		id=#{id}
	</delete>

	<update id="updateUser" parameterType="cn.itcast.mybatis.po.User">
		update user set
		username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}
		where id=#{id}
	</update>




</mapper>

5.创建一个SqlMapConfig.xml 必须加载User.xml映射文件

<?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>
	<!-- 和spring整合后 environments配置将废除-->
	<environments default="development">
		<environment id="development">
		<!-- 使用jdbc事务管理-->
			<transactionManager type="JDBC" />
		<!-- 数据库连接池-->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
				<property name="username" value="root"/>
				<property name="password" value="root" />
			</dataSource>
		</environment>
	</environments>	
	
	<mappers>
			<mapper resource="sqlmap/User.xml"></mapper>
	</mappers>
	
</configuration>

6.创建测试类,来测试程序


public class UserDaoImplTest {

	private SqlSessionFactory sqlSessionFactory;
	//此方法时在执行testFindUserById之前执行的
	
	@Before
	public void setUp() throws Exception{
		//创建sqlSessionFactory
		// mybatis配置文件
		String resource = "SqlMapConfig.xml";
		// 得到配置文件流
		InputStream inputStream = Resources.getResourceAsStream(resource);
        // 创建会话工厂,传入mybatis的配置文件信息
	sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	}
	
	@Test
	public void testFindUserById() throws Exception {
		  //创建UserDao的对象
			UserDao userDao=new UserDaoImpl(sqlSessionFactory);
			User user=userDao.findUserById(10);
			System.out.println(user);			
	}

}

mapper代理开发
开发规范:
1、在mapper.xml中namespace等于mapper接口地址
在这里插入图片描述

2、mapper.java接口中的方法名和mapper.xml中statement的id一致

3、mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致。

4、mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致。
在这里插入图片描述

Mapper代理的实现
1.mapper.java
在这里插入图片描述

2.mapper.xml
在这里插入图片描述

3.在SqlMapConfig.xml中加载mapper.xml
在这里插入图片描述

4.测试
在这里插入图片描述

Mybatis的全局配置文件:SqlMapConfig.xml
properties(属性)
settings(全局配置参数)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境集合属性对象)
environment(环境子属性对象)
transactionManager(事务管理)
dataSource(数据源)
mappers(映射器)

properties:
将数据库连接参数单独配置在db.properties中,只需要在SqlMapConfig.xml中加载db.properties的属性值。
创建一个db.properties

在这里插入图片描述

typeAliases(类型别名)
mybatis默认支持别名
别名 映射的类型
_byte byte
_long long
_short short
_int int
_integer int
_double double
_float float
_boolean boolean
string String
byte Byte
long Long
short Short
int Integer
integer Integer
double Double
float Float
boolean Boolean
date Date
decimal BigDecimal
bigdecimal BigDecimal

单个别名定义

 <!-- 单个别名定义 -->
  	<typeAliases>
  			<!-- 针对单个别名定义
  				type:类型的路径
  				alias:别名
  			 -->
  			<typeAlias type="com.dc.mybatis.po.User" alias="User" />
  	</typeAliases>

多个别名定义(常用)

 <!-- 多个别名定义 -->
  	<typeAliases>
  			<!-- 针对单个别名定义
  				type:类型的路径
  				alias:别名
  			 -->
  			<package name="com.dc.mybatis.po" />
  	</typeAliases>

typeHandlers(类型处理器)
一般我们都不需要去指定,因为他里面有默认的

**mappers(映射器) **

1.加载单个映射文件
在这里插入图片描述

2.加载多个映射文件 (常用)
在这里插入图片描述

输入映射parameterType
通过parameterType指定输入参数的类型,类型可以是简单类型、hashmap、pojo的包装类型

传递自定义的pojo的包装类型

1.新建一个UserCustom类继承User

//用户的扩展类
public class UserCustom extends User{
	
	//可以扩展用户的信息

}

2.创建包装类型pojo

//包装类型
public class UserQueryVo{
	//用户查询条件
	private UserCustom userCustom;
	
	public UserCustom getUserCustom() {
		return userCustom;
	}

	public void setUserCustom(UserCustom userCustom) {
		this.userCustom = userCustom;
	}
}

3.在UserMapper.xml中定义用户信息综合查询

在这里插入图片描述

4.创建UserMapper接口

public iinterface UserMapper{
	public List<UserCustom> findUserList(UserQueryVo userQueryVo) throws Exception
	}

5.测试代码

在这里插入图片描述

输出映射

resultType
使用resultType进行输出映射时,只有数据库中的列和pojo类中的属性名一致,才可以映射成功

1.输出简单类型 mapper.xml
需求:查看用户信息列表总数
在这里插入图片描述

2.mapper.java
在这里插入图片描述

3.测试代码
在这里插入图片描述

输出pojo对象和pojo列表
不管是输出的pojo单个对象还是一个列表(list中包括pojo),在mapper.xml中resultType指定的类型是一样的。
在mapper.java指定的方法返回值类型不一样:
1、输出单个pojo对象,方法返回值是单个对象类型

2、输出pojo对象list,方法返回值是List<Pojo>

resultMape

猜你喜欢

转载自blog.csdn.net/qq_42522346/article/details/84845553