2.Mybatis两种开发模式

Posted 重庆刘亦菲

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.Mybatis两种开发模式相关的知识,希望对你有一定的参考价值。

普通模式

自定义接口,接口实现类。

思考:需要sqlSessionFactory,生产sqlSession

UserDao:

package dao;

import java.util.List;
import domain.User;

public interface UserDao {
	//根据Id查询用户
	public User findUserByID(Integer id);
	//根据用户名进行模糊查询
	public List<User> findUserByUsername(String username);

}

UserDaoImpl:

package dao.impl;

import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import dao.UserDao;
import domain.User;

public class UserDaoImpl implements UserDao{
	
	//namespace
	private String ns="test.";

	private SqlSessionFactory sqlSessionFactory;
	public UserDaoImpl(SqlSessionFactory sqlSessionFactory){
		this.sqlSessionFactory=sqlSessionFactory;
	}
	
	public User findUserByID(Integer id) {
		SqlSession sqlSession=sqlSessionFactory.openSession();
		User user = sqlSession.selectOne(ns+"findUserByID",id);
		
		return user;
	}

	public List<User> findUserByUsername(String username) {
		SqlSession sqlSession=sqlSessionFactory.openSession();
		List<User> list=sqlSession.selectList(ns+"findUserByUsername", username);
		
		return list;
	}
}

Main3:

package test;

import static org.hamcrest.CoreMatchers.nullValue;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import dao.UserDao;
import dao.impl.UserDaoImpl;
import domain.User;

public class Main3 {

	SqlSessionFactory sqlSessionFactory=null;
	
	@Before
	public void beforeConf() throws IOException{
		String resources="sqlMapConfig.xml";
		InputStream inputStream=Resources.getResourceAsStream(resources);
		sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
		
	}
	
	//普通dao开发模式
	@Test
	public void commonDao(){
		UserDao userDao=new UserDaoImpl(sqlSessionFactory);
		//根据Id查询用户
		User user1 = userDao.findUserByID(16);
		System.out.println("user1:::"+user1);
		
		//根据名字模糊查询用户
		List<User> list = userDao.findUserByUsername("张");
		System.out.println(list);
	}
}

  

接口代理开发模式

自需要定义接口。

开发约定:

l 映射文件namespace必须是接口全类路径名。

l 映射文件的Statementid必须和接口的方法名一致。

sqlMapConfig.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 -->
<configuration>
	<!-- 可以配置多个运行环境,但是每个 SqlSessionFactory 实例只能选择一个运行环境   
	  一、development:开发模式
	   二、work:工作模式-->
	<environments default="development">
		 <!--id属性必须和上面的default一样  -->
		<environment id="development">
			<!-- mybatis事务管理器 ,由jdbc管理-->
			<transactionManager type="JDBC"/>
			<!--  mybatis连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql:///mybatis01"/>
				<property name="username" value="root"/>
				<property name="password" value="moujinling321"/>
			</dataSource>
		</environment>
	</environments>
	<!-- 引入外部映射文件 -->
	<mappers>
		<mapper resource="sqlMap/User.xml"/>
	</mappers>
</configuration>

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">
<!-- 
	MyBatis映射文件的开始标签 ,所有sql语句全部封装在mapper里面
	namespace:命名空间
		*隔离不同的映射文件,映射文件的唯一标识,可以任意命名
		*在接口代理开发中,namespace具有特殊含义,不能任意命名
			namespace需要写接口的全路径
	-->
<mapper namespace="dao.UserMapper">
	<!-- statement的id必须和接口中的方法名相同 -->
	<select id="findUserByID" parameterType="int" resultType="domain.User">
		select * from user where id=#{id}
	</select>
	
	
	<select id="findUserByUsername" resultType="domain.User" parameterType="string">
		select * from user where username like ‘%${value}%‘
	</select>
	
</mapper>

UserMapper:

package dao;

import java.util.List;
import domain.User;

public interface UserMapper {
	//根据Id查询用户
	public User findUserByID(Integer id);
	//根据用户名进行模糊查询
	public List<User> findUserByUsername(String username);

}

Main1:

package test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import dao.UserMapper;
import domain.User;

public class Main1 {
	SqlSessionFactory sqlSessionFactory=null;
	
	@Before
	public void beforeConf() throws IOException{		
		String resources = "sqlMapConfig.xml";
		InputStream inputStream = Resources.getResourceAsStream(resources);
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	}

	//接口代理开发模式
	@Test
	public void proxyInterface(){
		SqlSession sqlSession=sqlSessionFactory.openSession();
		
		//获取代理对象
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		//根据Id查询
		User user = userMapper.findUserByID(24);
		System.out.println(user);
		
		//根据用户名进行模糊查询
		List<User> users=userMapper.findUserByUsername("张");
		System.out.println(users);
	}
}

  

  

  

 

  

以上是关于2.Mybatis两种开发模式的主要内容,如果未能解决你的问题,请参考以下文章

替换的片段仍然可见

Spring针对事务处理提供哪两种事务编程模式。

糅合两种开发模式的快速开发平台解决方案

糅合两种开发模式的快速开发平台解决方案

用于数据加载的 Android 活动/片段职责

mybatis入门:jdbc的缺点