MyBatis_MyBatis之HelloWorld代码改进

1.引入

   上一节课,我们使用MyBatis实现了对数据的查找功能。但是呢这里面有一个问题。什么问题呢,就是我们的这一个代码:

Admin Admin = openSession.selectOne("com.cn.entity.AdminMapper.getAdmById", 1);

//参数给的是Object类型的参数,也就是说可以传递任何形式的参数,如何我们传入了一个和数据库字段中类型不一致的参数。那么它不会报错。但是没有查询的结果。

为了解决这一个问题。MyBatis给我们提供了一个接口,使用这一个接口来把传入的参数和返回的结果进行一个包装。并且接口可以和我们的配置文件进行动态的绑定。

 

2.代码实现

(1).编写接口

package com.cn.dao;

import com.cn.entity.Admin;

public interface AdminMapper {
	
   public Admin getAdminById(Integer id);
	
}

(2).配置文件和接口进行动态的绑定,在配置文件中进行设置

<?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">
<mapper namespace="com.cn.dao.AdminMapper">
<!-- 
namespace:名称空间;指定为接口的全类名
id:唯一标识
resultType:返回值类型
#{id}:从传递过来的参数中取出id值

public Admin getAdmById(Integer id);
 -->
	<select id="getAdmById" resultType="com.cn.entity.Admin">
		select id,username,password from admin where id = #{id}
	</select>
</mapper>

(3).编写测试类

public class MyBatisTest {
	

	public SqlSessionFactory getSqlSessionFactory() throws IOException {
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		return new SqlSessionFactoryBuilder().build(inputStream);
	}

	
	@Test
	public void test() throws IOException {
		// 1、获取sqlSessionFactory对象
		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
		// 2、获取sqlSession对象
		SqlSession openSession = sqlSessionFactory.openSession();
		try {
			// 3、获取接口的实现类对象
			//会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
			AdminMapper mapper = openSession.getMapper(AdminMapper.class);
			Admin Admin = mapper.getAdminById(1);
			System.out.println(mapper.getClass());
			System.out.println(Admin);
		} finally {
			openSession.close();
		}
	}

}

(4).实现结果测试

使用了接口式编程以后,我们有了更好地的解耦和数据校验。

 

3.HelloWorld案例小总结

(1).接口式编程的流程和注意事项

  1、接口式编程
  	原生:		Dao  ====>  DaoImpl
 	mybatis:	Mapper	  ====>  xxMapper.xml
 
  2、SqlSession代表和数据库的一次会话;用完必须关闭;

  3、SqlSession和connection一样它都是非线程安全。每次使用都应该去获取新的对象。

     也就是说:private SqlSession sqlSession;(错误,非线程安全,多线程环境会产生资源的竞争)
              SqlSession openSession = sqlSessionFactory.openSession();(正确)

  4、mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象。(将接口和xml进行绑定)
  		AdminMapper mapper = openSession.getMapper(AdminMapper.class);
        注意使用的是接口的对象,而不是实体的对象。

  5、两个重要的配置文件:

  		mybatis的全局配置文件:包含数据库连接池信息,事务管理器信息等...系统运行环境信息

  		sql映射文件(非常重要):保存了每一个sql语句的映射信息:
  					将sql抽取出来。	

(4).代码

链接:https://pan.baidu.com/s/1do75zUmp_sErMfqfNXbtpQ 
提取码:rwsj

Guess you like

Origin blog.csdn.net/u013185175/article/details/107126105