Mybatis入门实例(二)

Mybatis入门实例(一)

我们接着入门实例一介绍一下如何使用Mybatis开发Dao方法

方法一:Dao接口以及dao接口实现

程序员需要编写Dao接口以及dao接口的实现类

结构

1,创建UserDao接口

public interface UserDao {
	User findUserById(int id)throws IOException;
}

2,创建UserDao实现类UserDaoImpl

需要注入SqlSessionFactory,使用SqlSessionFactory生成SqlSession会话。

如果Mybatis和Spring整合,就可以让Spring管理SqlSessionFactory(将SqlSessionFactory在Spring容器中以单例方式存在。SqlSessionFactory创建SqlSession方法,是线程是安全的。),通过Spring将SqlSessionFactory注入到Dao接口中。

public class UserDaoImpl implements UserDao {
	private SqlSessionFactory sqlSessionFactory = null;

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

	@Override
	public User findUserById(int id) throws IOException {

		// 从会话工厂得到会话
		SqlSession sqlSession = sqlSessionFactory.openSession();

		// 通过sqlSession操作数据库
		// 第一个参数:UserMapper.xml中定义的statement的id
		// 第二个参数:输入参数
		User user = sqlSession.selectOne("test.findUserById", 4);

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

		return user;
	}

}

3,创建UserMapper.xml映射文件

<!--这块等于dao接口的实现 namespace必须和接口的类路径一样 -->
<mapper namespace="test">
	<select id="findUserById" parameterType="int"
		resultType="com.ghy.mybatis.po.User">
		Select * From users Where id = #{id}
	</select>
	<insert id="insertUser" parameterType="com.ghy.mybatis.po.User">
		Insert Into users(id,name,password) Values (#{id},#{name},#{password})
	</insert>
</mapper>

4,创建测试用例UserDaoImplTest

public class UserDaoImplTest {
	private SqlSessionFactory sqlSessionFactory=null;
	@Before
	public void setUp() throws Exception {
		String resource="SqlMapConfig.xml";
		InputStream inputStream=Resources.getResourceAsStream(resource); 
		
		//创建会话工厂
		sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
	}

	@After
	public void tearDown() throws Exception {
	}

	@Test
	public void testFindUserById() throws IOException {
		UserDao userDao=new UserDaoImpl(sqlSessionFactory);
		User user=userDao.findUserById(4);
		System.out.println(user);
	}

}

方法二:Mapper接口动态代理对象

程序员只需要编写mapper接口(就是dao接口),mapper是Mybatis的官方叫法,不需要写实现类。

结构


1,创建UserMapper接口(相当于方法一的UserDao接口)
定义两个抽象方法 分别获取一个对象和获取一个List集合
public interface UserMapper {
	public User findUserById(int id);
	public List<User> findUserList();
}

2,创建UserMapper.xml映射文件

<!--这块等于dao接口的实现 namespace必须和接口的类路径一样 -->
<mapper namespace="com.ghy.mybatis.mapper.UserMapper">
	<select id="findUserById" parameterType="int"
		resultType="com.ghy.mybatis.po.User">
		Select * From users Where id = #{id}
	</select>
	<select id="findUserList"
		resultType="com.ghy.mybatis.po.User">
		Select * From users
	</select>
	<insert id="insertUser" parameterType="com.ghy.mybatis.po.User">
		Insert Into users(id,name,password) Values (#{id},#{name},#{password})
	</insert>
</mapper>

UserMapper规则:

(1).UserMapper.xmlnamespaceUserMapper.java的全路径名;

(2). UserMapper.xml中的statementidUserMapper.java中的方法名;

(3). UserMapper.xml中的statementparameterType类型和UserMapper.java中的方法形参类型一致;

(4). UserMapper.xml中的statementresultType类型和UserMapper.java中的方法返回值类型一致。

注:在UserMapper.xml中定义的resultType的类型应该是Sql查询结果一条记录映射java对象的类型。

是否返回List集合还是单个对象,由UserMapper接口方法返回值来决定。

如果返回的是个List集合,生成代理对象内部会调用sqlSession.selectList()方法获取一个集合。

如果返回的是一个单个对象,生成代理对象内部就会调用sqlSession.selectOne()方法获取单个对象。


3,将UserMapper.xml在SqlMapConfig.xml中配置

<mappers>
	<mapper resource="sqlmap/UserMapper.xml" />
</mappers>

4,创建测试用例UserMapperTest

public class UserMapperTest {
	
	private SqlSessionFactory sqlSessionFactory = null;

	@Before
	public void setUp() throws Exception {
		String resource = "SqlMapConfig.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);

		// 创建会话工厂
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	}

	@After
	public void tearDown() throws Exception {
	}

	@Test
	public void testFindUserById() {
		//得到SqlSession
		SqlSession sqlSession=sqlSessionFactory.openSession();
		//通过SqlSession得到UserMapper的动态代理对象
		UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
		//调用UserMapper的方法
		User user=userMapper.findUserById(4);
		System.out.println(user);
		
	}
	
	@Test
	public void testFindUserList() {
		//得到SqlSession
		SqlSession sqlSession=sqlSessionFactory.openSession();
		//通过SqlSession得到UserMapper的动态代理对象
		UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
		//调用UserMapper的方法
		List<User> users=userMapper.findUserList();
		for (User user : users) {
			System.out.println(user);
		}
	}
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值