【mybatis基础】mybatis开发dao两种方法
mybatis是一个支持普通SQL查询,存储过程和高级映射的优秀的持久层的框架,是apache下的顶级项目。mybatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。mybatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO映射成数据库中的记录。
其中,开发dao有两种方法,一种原始的dao开发方法,程序员需要写dao接口和dao实现类。另一种是mapper代理方法,程序员只需要写mapper接口相当于dao接口。
原始dao开发方法
1.编写dao接口(UserDao)
- public interface UserDao {
- // 根据id查询用户信息
- public User findUserById(int id) throws Exception;
- }
2.编写dao实现类
- public class UserDaoImpl implements UserDao {
- // 需要向dao实现类中注入SqlSessionFactory
- // 这里通过构造方法注入
- private SqlSessionFactory sqlSessionFactory;
- public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
- this.sqlSessionFactory = sqlSessionFactory;
- }
- @Override
- public User findUserById(int id) throws Exception {
- SqlSession sqlSession = sqlSessionFactory.openSession();
- //这里的test.findUserById是与下面的映射文件user.xml中的namespace+id有关。
- User user = sqlSession.selectOne("test.findUserById", id);
- // 释放资源
- sqlSession.close();
- return user;
- }
- }
3.编写映射文件(user.xml)
- <mapper namespace="test">
- <select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">
- SELECT * FROM USER WHERE id=#{value}
- </select>
- </mapper>
4.编写测试类
- public class UserDaoImplTest {
- private SqlSessionFactory sqlSessionFactory;
- // 此方法是在执行testFindUserById之前执行
- @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 testUserDaoImpl() throws Exception{
- // 创建UserDao的对象
- UserDao userDao = new UserDaoImpl(sqlSessionFactory);
- // 调用UserDao的方法
- User user = userDao.findUserById(1);
- System.out.println(user);
- }
- }
测试结果:
mapper代理方法
1.编写mapper.java(UserMapper.java相当于java接口)
- public interface UserMapper {
- // 根据id查询用户信息
- public User findUserById(int id) throws Exception;
- }
2.编写mapper.xml(UserMapper.xml)
- <mapper namespace="cn.itcast.mybatis.mapper.UserMapper">
- <!--通过id查询用户表的记录 -->
- <select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">
- SELECT * FROM USER WHERE id=#{value}
- </select>
- </mapper>
注意:
(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指定的类型一致。
3.编写测试类
- public class UserMapperTest {
- private SqlSessionFactory sqlSessionFactory;
- // 此方法是在执行testFindUserById之前执行
- @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 {
- SqlSession sqlSession=sqlSessionFactory.openSession();
- //创建UserMapper对象,mybatis自动生成mapper代理对象
- UserMapper userMapper =sqlSession.getMapper(UserMapper.class);
- //调用UserMapper的方法
- User user=userMapper.findUserById(1);
- System.out.println(user);
- sqlSession.close();
- }
- }
测试结果:
现在最常用的方法是第二种使用mapper代理的方法,不过第一种也有公司在用所以两种都要知道。
【mybatis基础】mybatis开发dao两种方法的更多相关文章
- MyBatis无限级分类实现的两种方法--自关联与map集合
1.这回先创建数据库吧 下表cid是CategoryId的缩写,cname是CategoryName的缩写,pid是parentId的缩写 无限级分类一般都包含这三个属性,至少也要包含cid和pid才 ...
- Java 基础,小数百分比两种方法
public static void main(String[] args) { System.out.println(getPercent(1, 2)); } public static Strin ...
- mybatis 根据id批量删除的两种方法
原文:https://blog.csdn.net/qq_40010745/article/details/81032218 mybatis 根据id批量删除的两种方法 第一种,直接传递给mappe ...
- 设置Mybatis打印调试sql的两种方式
http://blog.csdn.net/gao36951/article/details/53641432 ********************************************* ...
- mybatis中批量插入的两种方式(高效插入)
MyBatis简介 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用 ...
- C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法。
原文:C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法. 一般我们在开发Windows Phone App时,需要取得萤幕的大小来自定义最佳化控制项的大小,但是开如何取得萤 ...
- Hadoop基础-HDFS递归列出文件系统-FileStatus与listFiles两种方法
Hadoop基础-HDFS递归列出文件系统-FileStatus与listFiles两种方法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. fs.listFiles方法,返回Loc ...
- 【java基础 13】两种方法判断hashmap中是否形成环形链表
导读:额,我介绍的这两种方法,有点蠢啊,小打小闹的那种,后来我查了查资料,别人都起了好高大上的名字,不过,本篇博客,我还是用何下下的风格来写.两种方法,一种是丢手绢法,另外一种,是迷路法. 这两种方法 ...
- Hive开发中使用变量的两种方法
在使用hive开发数据分析代码时,经常会遇到需要改变运行参数的情况,比如select语句中对日期字段值的设定,可能不同时间想要看不同日期的数据,这就需要能动态改变日期的值.如果开发量较大.参数多的话, ...
随机推荐
- <基础> PHP 进阶之 类型转换
引用官方的解释 PHP 在变量定义中不需要(或不支持)明确的类型定义:变量类型是根据使用该变量的上下文所决定的.也就是说,如果把一个 string 值赋给变量$var,$var 就成了一个 strin ...
- Android编程权威指南(第三版)- 2.8 挑战练习:添加后退按钮
package com.example.geoquiz; import android.support.v7.app.AppCompatActivity; import android.os.Bund ...
- 利用strstr和sscanf解析GPS信息
比如说我们要做一个GPS导航的项目,需要读取GPS模块以ASCII码的形式发送过来的数据,然后对这些数据进行处理,提取我们需要的信息.这就涉及到很多操作字符串的问题.下面就以此为例,利用strstr函 ...
- F1026 File not found DockForm.dcu
xe6 [dcc32 Fatal Error] ToolsAPI.pas(18): F1026 File not found: 'E:\...\DockForm.dcu' delphi,xe6,包含了 ...
- 解决jsfl 弹出警告
fl.showIdleMessage(false);
- VirtualBox安装增强工具方法
1.http://blog.csdn.net/wuliowen/article/details/71541561 2.https://segmentfault.com/a/11900000062335 ...
- Linux系统基础5周入门精讲(Linux发展过程)
什么是操作系统 作为应用开发程序员,我们开发的软件都是应用软件,而应用软件必须运行于操作系统之上,操作系统则运行于硬件之上,应用软件是无法直接操作硬件的,应用软件对硬件的操作必须调用操作系统的接口,由 ...
- IP地址的含义
不管是学习网络还是上网,IP地址都是出现频率非常高的词.Windows系统中设置IP地址的界面如图1所示,图中出现了IP地址.子网掩码.默认网关和DNS服务器这几个需要设置的地方,只有正确设置,网络才 ...
- javascript 模拟java 实现继承的5种方式
1.继承第一种方式:对象冒充 function Parent(username){ this.username = username; this.hello = function(){ alert(t ...
- HTML+CSS基础课程
慕课网上的课程 为了方便以后查阅 现做笔记如下 首先 了解下面的知识 1. HTML是网页内容的载体.内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字.图片.视频等. 2. CSS样式是 ...