一、原始Dao开发方式

UserDao.java

public interface UserDao{

	public User findUserByID(Serializable id);

	public List<User> findUsersByName(String name);
}

UserDaoImpl.java

public class UserDaoImpl implements UserDao{

	//SqlSessionFactory是单例存在,不应该在具体实例中创建,需要外部依赖注入
private SqlSessionFactory sqlSessionFactory; public UserDaoImpl(SqlSessionFactory sqlSessionFactory){
this.sqlSessionFactory = sqlSessionFactory;
} @Override
public User findUserByID(Serializable id){ SqlSession sqlSession = sqlSessionFactory.openSession();
User user = sqlSession.selectOne("test.findUserById",id);
sqlSession.close();
return user;
} @Override
public List<User> findUsersByName(String name){ SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> list = sqlSession.selectList("test.findUserByName",name);
sqlSession.close();
return list;
} }

Test.java

public class UserDaoTest{

	private SqlSessionFactory sqlSessionFactory;
private UserDao userDao; {
String resource = "SqlMapConfig.xml";
InputStream is;
try{
is = Resources.getResourceAsStream(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
sqlSessionFactory = builder.build(is);
userDao = new UserDaoImpl(sqlSessionFactory);
}catch(IOException e){
e.printStackTrace();
} } @Test
public void testFindUserByID(){ User user = userDao.findUserByID(27);
System.out.println(user);
} @Test
public void testFindUsersByName(){ List<User> list = userDao.findUsersByName("小明");
for(User user : list){
System.out.println(user);
}
} }

原始dao开发存在一些问题:

(1)存在一定量的模板代码

     比如: 通过SqlSessionFactory创建SqlSession;调用SqlSession的方法操作数据库;关闭Sqlsession。

(2)存在一些硬编码

     调用SqlSession的方法操作数据库时,需要指定statement的id,这里存在了硬编码。

 

二、Mapper代理开发方式

     Mapper代理的开发方式,程序员只需要编写mapper接口(相当于dao接口)即可。Mybatis会自动的为mapper接口生成动态代理实现类。不过要实现mapper代理的开发方式,需要遵循一些开发规范。

(1)mapper接口的全限定名要和mapper映射文件的namespace的值相同。

(2)mapper接口的方法名称要和mapper映射文件中的statement的id相同。

(3)mapper接口的方法参数只能有一个,且类型要和mapper映射文件中statement的parameterType的值保持一致。

(4)mapper接口的返回值类型要和mapper映射文件中statement的resultType值或resultMap中的type值保持一致。

 

Mapper.java

public interface UserMapper{

	public User findUserById(int id);

	public void saveUser(User user);
}

 

UserMapper.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"> <!-- namespace:此时用mapper代理方式,它的值必须等于对应mapper接口的全限定名 -->
<mapper namespace="com.kiwi.mapper.UserMapper"> <!-- 根据ID查询一个用户 -->
<select id="findUserById" parameterType="int" resultType="com.kiwi.domain.User">
SELECT * FROM USER WHERE id = #{id}
</select> <!-- 根据名字模糊查询 -->
<select id="findUserByName" parameterType="java.lang.String" resultType="com.kiwi.domain.User">
SELECT * FROM USER WHERE username LIKE '%${value}%'
</select> <!-- 添加一个用户,并返回插入的ID -->
<insert id="saveUser" parameterType="com.kiwi.domain.User">
<selectKey keyProperty="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO USER (username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
</insert> <!-- 删除一个用户 -->
<delete id="deleteUser" parameterType="int">
DELETE FROM USER WHERE id = #{id}
</delete> <!-- 修改一个用户 -->
<update id="updateUser" parameterType="com.kiwi.domain.User">
UPDATE USER SET username = #{username},address = #{address} WHERE id = #{id}
</update> </mapper>

 

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> <!-- 配置mybatis的环境信息,与spring整合之后,该部分将由spring管理 -->
<environments default="development">
<environment id="development">
<!-- 配置JDBC事务控制,由mybatis进行管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源,采用dbcp连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf8" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments> <!-- 加载Mapper -->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers> </configuration>

 

Test.java

	private SqlSessionFactory sqlSessionFactory;

	@Before
public void setUp() throws Exception{
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} @Test
public void testFindUserById(){ SqlSession sqlSession = sqlSessionFactory.openSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.findUserById(26);
System.out.println(user); sqlSession.close();
} @Test
public void testSaveUser(){ SqlSession sqlSession = sqlSessionFactory.openSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User("WWW","1",new Date(),"北京市海淀区");
mapper.saveUser(user);
System.out.println(user); sqlSession.commit();
sqlSession.close();
} }

 

三、全局配置

1.properties

 

2.typeAliases

     类别名,只能对PO类进行类型别名的定义。

别名

映射的类型

_byte

byte

_long

long

_short

short

_int

int

_integer

int

_double

double

_float

float

_boolean

boolean

string

String

byte

Byte

long

Long

short

Short

int

Integer

integer

Integer

double

Double

float

Float

boolean

Boolean

date

Date

decimal

BigDecimal

bigdecimal

BigDecimal

 

Mybatis基础学习(二)—开发Dao方式的更多相关文章

  1. SpringMVC基础学习(二)—开发Handler

    一.Handler开发         Handler的开发方式在springmvc中有多种,下面我们主要讲解三种实现方式:实现Controller接口.实现HttpRequestHandler接口. ...

  2. 零基础学习iOS开发

    零基础学习iOS开发不管你是否涉足过IT领域,只要你对iOS开发感兴趣,都可以阅读此专题. [零基础学习iOS开发][02-C语言]11-函数的声明和定义 摘要: 在上一讲中,简单介绍了函数的定义和使 ...

  3. 零基础学习hadoop开发所必须具体的三个基础知识

    大数据hadoop无疑是当前互联网领域受关注热度最高的词之一,大数据技术的应用正在潜移默化中对我们的生活和工作产生巨大的改变.这种改变给我们的感觉是“水到渠成”,更为让人惊叹的是大数据已经仅仅是互联网 ...

  4. 【零基础学习iOS开发】【转载】

    原文地址:http://www.cnblogs.com/mjios/archive/2013/04/24/3039357.html 本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开 ...

  5. 李洪强iOS开发之【零基础学习iOS开发】【01-前言】01-开篇

    从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过IT领域,也不管你是理科生还是文科生,只要你对iOS开发感兴趣,都可以来阅读此专题.我尽量以通俗易懂的语言,让每个人都能够看懂 ...

  6. 【零基础学习iOS开发】【01-前言】01-开篇

    本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开发 四.学习iOS开发的目的 五.学习iOS开发的前提 从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过I ...

  7. [iOS]关于零基础学习iOS开发的学习方法总结

    关于零基础学习iOS开发的学习方法总结 最近很多零基础来参加蓝鸥培训的学生经常会问到一些学习方法的问题,就如下我自己见过的好的学习方法一起讨论一下. 蓝鸥iOS开发技术的学习路线图 程序员的主要工作是 ...

  8. Python基础学习二

    Python基础学习二 1.编码 utf-8编码:自动将英文保存为1个字符,中文3个字符.ASCll编码被囊括在内. unicode:将所有字符保存为2给字符,容纳了世界上所有的编码. 2.字符串内置 ...

  9. Python入门基础学习 二

    Python入门基础学习 二 猜数字小游戏进阶版 修改建议: 猜错的时候程序可以给出提示,告诉用户猜测的数字偏大还是偏小: 没运行一次程序只能猜测一次,应该提供多次机会给用户猜测: 每次运行程序,答案 ...

随机推荐

  1. Javascript几种跨域方式总结

    在客户端编程语言中如javascript,同源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问和操作另外一个域的绝大部分属性和方法.只有当两个域具有相同的协议,相同的主机,相同的端口时,我们就认定 ...

  2. SQLHELPER 帮助类

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  3. angular : ngModel 内部流程

    angular 1.5 beta link NgModelController provides API for the ngModel directive. The controller conta ...

  4. vue2.0全局组件之pdf

    目的:像elementUI那样注册全局组件 预览pdf文件 技术支持:使用火狐的pdf.js http://mozilla.github.io/pdf.js/ 准备:新建一个CPdf.vue文件,把火 ...

  5. 深入浅出Redis-Spring整合Redis

    概述: 在之前的博客中,有提到过Redis 在服务端的一些相关知识,今天主要讲一下Java 整合Redis的相关内容. 下面是Jedis 的相关依赖: <dependency> <g ...

  6. Spring框架中 配置c3p0连接池 完成对数据库的访问

    开发准备: 1.导入jar包: ioc基本jar jdbcTemplate基本jar c3p0基本jar 别忘了mysql数据库驱动jar 原始程序代码:不使用配置文件方式(IOC)生成访问数据库对象 ...

  7. mfc--弹出文件夹对话框

    1. HRESULT CoInitializeEx(void* pvReserved,DWORD dwCoInit) 初始化com组件,传递参数COINIT_APARTMENTTHREADED 2.L ...

  8. 第一个小程序:helloWord

    public class HelloWorld {     public static void main(String []args){          System.out.println(&q ...

  9. KoaHub平台基于Node.js开发的Koa router路由插件代码信息详情

    koa-router Router middleware for koa. Provides RESTful resource routing. koa-router       Router mid ...

  10. 当前最上层的视图控制器vc 和 当前最上层的导航控制器nav

    在处理 URL Router 跳转的时候,我们经常需要得到 当前最上层的视图控制器 和 当前最上层的导航控制器 来进行视图跳转或者方法调用.- (UIViewController *)currentV ...