文档章节

MyBatis初探二

AAASSSSddd
 AAASSSSddd
发布于 2016/04/02 23:52
字数 603
阅读 80
收藏 1

一、Mybatis 的 Dao 层两种开发方式



1、原始Dao开发模式( 自己手动实现Dao层接口和实现类 )

》    实现思路:编写Dao接口和实现类,在Dao接口中注入单例的SqlSessionFactory,通过SqlSessionFactory获取SqlSession来获取数据库操作对象。

package com.ts.dao;

import com.ts.domain.Users;

public interface UsersDao {
	
	//根据ID查询用户信息
	Users findUserById(int id) throws Exception;
	
}
package com.ts.dao.impl;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import com.ts.dao.UsersDao;
import com.ts.domain.Users;

public class UsersDaoImpl implements UsersDao {

	private SqlSessionFactory sqlSessionFactory;

	//构造函数注入SqlSessionFactory
	public UsersDaoImpl(SqlSessionFactory sqlSessionFactory) {
		this.sqlSessionFactory =sqlSessionFactory;
	}


	/**
	 * 1和3是模板代码
	 * 1.SqlSession sqlSession = getSqlSession();
	 * 2.业务逻辑
	 * 3.sqlSession.close();
	 */

	@Override
	public Users findUserById(int id) throws Exception {
		SqlSession sqlSession = sqlSessionFactory.openSession();
		Users user  = sqlSession.selectOne("Users.findUserById", id);
		sqlSession.close();
		return user;
	}

    缺点: 1.代码冗余,重复代码很多。

                2.根据Users.xmlMapper映射文件的id获取SQL语句(Users.findUserById),硬编码在Java代码里了。

                3.调用SqlSession方法时,传入的参数编译期间不报错,不能及时发现错误。(如:sqlSession.selectOne("Users.findUserById","123");

2、mapper代理方法( 自己只需要写mapper接口( Dao接口 ) ):与Spring整合后就更简单,这种方式也就不需要了,在这做大概了解。

       根据接口编写规范:Mybatis可以自动生成Mapper接口实现类的代理对象

        1.编写UserMapper.java接口和UserMapper.xml的SQL映射文件

package com.ts.dao;
public interface UserMapper {
	public Users findUserById(int id) throws Exception;
}
<mapper namespace="com.ts.dao.UserMapper">
	<select id="findUserById" parameterType="int" resultType="com.ts.domain.Users">
		select * from Users where id = #{id}
	</select>
</mapper>

      2.Mybatis自动生成代理实现类需要遵循的规范

            ->Mapper.xml的namespace 和 mapper.xml接口全限定名一致( 观察上面代码 )

            ->Mapper.java接口中的方法名和mapper.xml中每个SQL的ID一致

            ->Mapper.java接口中的输入参数类型和mapper.xml中每个SQL的输入参数指定的类型一致

            ->Mapper.java接口中的返回值参数类型和mapper.xml中每个SQL的返回值指定的类型一致

    3.测试( 不要忘记把mapper.xml添加到SqlMapConfig.xml中

package com.ts.dao.test;

import java.io.IOException;
import java.io.InputStream;

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 com.ts.dao.UserMapper;
import com.ts.domain.Users;

public class UserMapperTest {

	private static SqlSessionFactory sqlSessionFactory;

	@Before
	public void before() throws IOException{
		//通过输入流读取全局配置信息创建工厂
		String resource = "SqlMapConfig.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

	}

	@Test
	public void test() throws Exception {
		SqlSession sqlSession = sqlSessionFactory.openSession();
		//生成代理实现类
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		Users user = userMapper.findUserById(1);
		//==>Users [id=1, name=田硕, sex=男, birth=Sat Apr 02 00:00:00 CST 2016, address=河南商丘]
		System.out.println(user);
	}

}



© 著作权归作者所有

上一篇: MyBatis初探三
下一篇: MyBatis初探一
AAASSSSddd
粉丝 19
博文 51
码字总数 48587
作品 0
杭州
程序员
私信 提问
加载中

评论(5)

AAASSSSddd
AAASSSSddd 博主

引用来自“zonghua”的评论

引用来自“我的名字叫田硕”的评论

引用来自“zonghua”的评论

现在啊发现java这套东西真够啰嗦的

怎么说呢。Java目前还是很牛的。国内阿里巴巴,网易,内部后台代码几乎全是Java编写的。

也真是心疼他们呢

😆
啦啦啦拉拉
啦啦啦拉拉

引用来自“我的名字叫田硕”的评论

引用来自“zonghua”的评论

现在啊发现java这套东西真够啰嗦的

怎么说呢。Java目前还是很牛的。国内阿里巴巴,网易,内部后台代码几乎全是Java编写的。

也真是心疼他们呢
AAASSSSddd
AAASSSSddd 博主

引用来自“zonghua”的评论

现在啊发现java这套东西真够啰嗦的
开源中国也是。
AAASSSSddd
AAASSSSddd 博主

引用来自“zonghua”的评论

现在啊发现java这套东西真够啰嗦的

怎么说呢。Java目前还是很牛的。国内阿里巴巴,网易,内部后台代码几乎全是Java编写的。
啦啦啦拉拉
啦啦啦拉拉
现在啊发现java这套东西真够啰嗦的
MyBatis初探一

一、MyBatis介绍 mybatis(持久层框架3.2.6 or 3.2.7)简单执行流程 >1.SqlMapConfig.xml(全局配置文件),配置数据源,事务和运行环境等 >2.配置映射文件(编写SQL语句):mapper.xml... >3.SqlSes...

AAASSSSddd
2016/04/02
95
0
MyBatis初探四

一、 IF 判断 需要额外定义一个查询类来封装查询对象( getXX setXX )。 编写mapper.xml文件 测试 package com.ts.dao.vo; import com.ts.domain.Users;/** * 复杂条件查询VO * @author TS *...

AAASSSSddd
2016/04/03
138
0
MyBatis初探三

一、输入类型( parameterType ) 简单类型( 基本数据类型 ) HashMap 单个JavaBean( 自定义JavaBean类型 ) 传入JavaBean的包装类型( 用处:比如说用户的复杂查询( 关联查询 ),需要传入用户信息...

AAASSSSddd
2016/04/03
40
0
C#进阶系列——DDD领域驱动设计初探(四):WCF搭建

原文:C#进阶系列——DDD领域驱动设计初探(四):WCF搭建 前言:前面三篇分享了下DDD里面的两个主要特性:聚合和仓储。领域层的搭建基本完成,当然还涉及到领域事件和领域服务的部分,后面再...

杰克.陈
2017/12/19
0
0
DreamWork/mgfinal

mgfinal 基于mgwork(servlet3.0多实例非单例)做mvc框架,mybatis做orm框架,mgioc做单例容器的mgfinal框架,mgutil做日志及常用工具方法管理,致力于打造实用的java后台底层。 适用于中小型...

DreamWork
2016/05/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
今天
6
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
今天
7
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
今天
5
0
OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
1K
11
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
40
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部