zoukankan      html  css  js  c++  java
  • Mybatis框架学习02

    写在前面

    本文接上文:https://www.cnblogs.com/wushenjiang/p/12451977.html

    1.原始dao开发方法(程序员需要写dao接口和dao实现类)

    思路:

    • 1.程序员首先书写dao接口和dao实现类
    • 2.向dao实现类中注入SqlSessionFactory,在方法体内通过SqlSessionFactory创建SqlSession。

    代码展示:

    dao接口:

    public interface UserDao {
    	
    	//根据id查询用户信息
    	public User findUserById(int id) throws Exception;
    	//添加用户信息
    	public void insertUser(User user) throws Exception;
    	//删除用户信息
    	public void deleteUser(int id) throws Exception;
    }
    

    dao实现类:

    
    	//需要向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 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();
    		
    	}
    		
    

    测试代码(使用Junit进行单元测试)

    public class UserDaoImplTest {
    	private SqlSessionFactory sqlSessionFactory;
    	@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);
    
    		// 调用UserDao的方法
    		User user = userDao.findUserById(1);
    		
    		System.out.println(user);
    	}
    
    

    开发中的问题:

    • 1.dao接口实现类中存在大量模版方法
    • 2.调用sqlsession方法时将statement的id硬编码了
    • 3.调用sqlsession方法传入的变量IDE不会报错,不利于开发。

    2.mapper代理开发方法(程序员只需提供mapper接口)

    思路:

    • 需要编写一个mapper.xml映射文件
    • 需要遵守一定的开发规范.

    开发规范:

    • 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指定的类型一致

    • 例:

    代码展示:

    需要在SqlMapConfig.xml中加载mapper.xml

    测试代码:

    	@Test
    	public void testFindUserByName() throws Exception {
            SqlSession sqlSession = sqlSessionFactory.openSession();
            // 创建Usermapper对象,mybatis自动生成mapper代理对象
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            List<User> list = mapper.findUserByName("赵");
            System.out.println(list);
            sqlSession.close();
    	}
    

    小结

    mapper接口方法比起原始Dao接口方法要灵活的多,因此建议在开发中尽量使用mapper接口方法来实现.

    3.SqlMapConfig.xml内的几项参数解释

    3.1 properties属性

    可以加载来自其他配置文件,以降低程序的耦合性。如我们可以将数据库配置单写一个properties,然后在SqlMapConfig.xml中读取它,如图:


    建议: 不要在properties元素体中添加任何属性值,只将属性值定义在properties文件中。在properties文件中定义属性名要有一定的特殊性,如XXXX.XXX

    3.2 setting(全局配置)

    可用于调整mybatis框架的一些运行参数,如开启二级缓存、开启延迟加载等

    3.3 typeAliases(别名)

    在mybatis中,自带了许多别名,如图:

    但在开发中,我们也可以将自己的pojo类自定义一个别名以方面我们的使用:
    单个定义:

    批量定义:(常用)

    3.4 mappers(映射配置)

    mappers主要用来加载映射文件,我们有三种加载方式:
    1.通过resource加载单个映射文件:

    2.通过mapper接口加载单个映射文件(前提是使用mapper代理方法)

    3.批量加载mapper(推荐使用)

  • 相关阅读:
    B507实验室打印机连接方法
    2016年武汉大学计算机学院“新技术系列讲座”简介记录
    使用SpringBoot快速构建应用程序
    UIColor,CGColor,CIColor三者的区别和联系
    Objective C中NULL、Nil、nil、NSNull 的区别
    iOS 部分机制
    常见排序算法-采用Objective-c实现
    iOS的永久存储
    网络协议初探
    iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用
  • 原文地址:https://www.cnblogs.com/wushenjiang/p/12506992.html
Copyright © 2011-2022 走看看