Mybatis框架研究学习

提供相关资料下载地址:http://download.csdn.net/detail/u010879420/9921829


Mybatis框架


 


一、     What is MyBatis?

MyBatis is a first class persistence framework with support for customSQL, stored procedures

and advanced mappings. MyBatis 是一个持久层框架,支持客户端sql语句,永久保存及高级映射

 

MyBatis eliminates almost all of the JDBC code and manual setting of

parameters and retrieval of results.

 

 

MyBatis 去除了很多JDBC代码,手动配置的参数和结果集的处理

 

MyBatis can use simple XML or Annotations(注释) for configuration

and map primitives(原始), Map interfaces and Java POJOs (Plain Old Java Objects) to databaserecords.

 

2017/7/14,9:18

二、     Mybatis连接sqlserver步骤

1.      确保sqlserver上的TCP/IP连接成功

 

 

 

三、     SqlMapConfig.xml中配置【其中连接串(注意端口)】

 

 

<?xmlversion="1.0" encoding="UTF-8"?>

<!DOCTYPEconfiguration

PUBLIC"-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

<environmentsdefault="development">

<environmentid="development">

<transactionManagertype="JDBC"/>

<dataSourcetype="POOLED">

<propertyname="driver"value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>

<propertyname="url"value="jdbc:sqlserver://192.168.50.112:1433;DatabaseName=SchoolSys"/>

<propertyname="username" value="sa"/>

<propertyname="password" value="123"/>

</dataSource>

</environment>

</environments> 

<mappers>

<mapperresource="sqlmap/User.xml"/>

</mappers>

</configuration>

 

四、     映射文件Mapper.xml配置

<?xmlversion="1.0" encoding="UTF-8"?>

<!DOCTYPEmapper

PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

 

<mappernamespace="test">

 

<selectid="findUserById" parameterType="java.lang.Integer"resultType="cn.zzh.mybatis.po.User">

SELECT * FROMuserinfo WHERE id = #{value}

</select>

 

<selectid="findUserByName" parameterType="java.lang.String"resultType="cn.zzh.mybatis.po.User">

<!-- SELECT* FROM userinfo WHERE username = #{value} -->

SELECT * FROMuserinfo WHERE username like '%${value}%'

</select>

 

</mapper>

 

1.具体的代码程序

 

@Test

public voidfindUserByIdTest(){

//mybatis配置文件

Stringresource = "SqlMapConfig.xml";

try {

//得到配置文件流

InputStreaminputStream = Resources.getResourceAsStream(resource);

 

//创建会话工厂,传入mybatis的配置信息

SqlSessionFactorysqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

 

//通过工厂得到sqlSession

SqlSessionsqlSession =sqlSessionFactory.openSession();        

 

//通过SqlSession操作数据库

//第一个参数:映射文件statement的ID,等于=namespace+"."+statement的ID

//第二个参数:指定和映射文件中所匹配的parameterType类型的参数

//SqlSession.selectOne结果是与映射文件中所匹配的resultType类型的对象

User user =sqlSession.selectOne("test.findUserById",1);                        

System.out.println(user);

 

//清除会话

sqlSession.close();

 

} catch(IOException e) {

// TODOAuto-generated catch block

e.printStackTrace();

}

}

 

@Test

public voidfindUserByNTest(){

//mybatis配置文件

Stringresource = "SqlMapConfig.xml";

try {

//得到配置文件流

InputStreaminputStream = Resources.getResourceAsStream(resource);

 

//创建会话工厂,传入mybatis的配置信息

SqlSessionFactorysqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

 

//通过工厂得到sqlSession

SqlSessionsqlSession =sqlSessionFactory.openSession();        

 

//通过SqlSession操作数据库

//第一个参数:映射文件statement的ID,等于=namespace+"."+statement的ID

//第二个参数:指定和映射文件中所匹配的parameterType类型的参数

//SqlSession.selectOne结果是与映射文件中所匹配的resultType类型的对象

 

List<User>list = sqlSession.selectList("test.findUserByName",'z');

 

 

//清除会话

sqlSession.close();

 

} catch(IOException e) {

// TODOAuto-generated catch block

e.printStackTrace();

}

}

2.具体项目名称及目录

 

 

2017/7/17,10:39

五、     selectOne 和selectList

 

selectOne表示查询出一条记录进行映射。如果使用selectOne可以实现使用selectList也可以实现(list中只有一个对象)

selectList表示查询出一个列表(多条记录)进行映射。如果使用selectList查询多条记录,不能使用selectOne。会出现如下错误:

org.apache.ibatis.exceptions.TooManyResultsException:Expected one result (or null) to be returned by selectOne(), but found: 3

 

 

 

2017/7/17,8:26

六、     Mapper代理方法

 

思路

程序员还需要编写mapper.xml映射文件

程序员编写mapper接口需要准寻一些开发规范,mybatis可以自动生成mapper接口实现类代理对象

 

 

开发规范

1.      在mapper.xml中namespace等于mapper接口地址

 

<!--使用Mapper代理方法,namespace有特殊重要的作用,namespace等于mapper接口地址 -->

<mappernamespace="cn.zzh.mybatis.mapper.UserMapper">

 

 

2.      Mapper.java接口中方法名和mapper.xml中statement的id一致

3.      Mapper.java接口中方法输入参数和mapper.xml中statement的parameterType指定的类型一致

4.      Mapper.java接口中方法返回值类型和mapper.xml中statement的resultType指定的类型一致

 

Mapper.java代码:

packagecn.zzh.mybatis.mapper;

importcn.zzh.mybatis.po.User;

public interface UserMapper {

public User findUserById(int id) throws Exception;

}

 

 

Mapper.xml代码:

<selectid="findUserById" parameterType="java.lang.Integer"resultType="cn.zzh.mybatis.po.User">

SELECT * FROMuserinfo WHERE id = #{value}

</select>

 

 

 

范例:

多条数据查询

 

Mapper.java代码:

//多条数据查询

public List<User> findUserByName(String name) throwsException;

 

Mapper.xml代码:

<!-- 多条数据查询 -->

<selectid="findUserByName" parameterType="java.lang.String" resultType="cn.zzh.mybatis.po.User">

SELECT * FROMuserinfo WHERE username like '%${value}%'

</select>

 

测试代码:

SqlSessionsqlSession = sqlSessionFactory.openSession();

 

//创建UserMapper对象,mybatis自动生成mapper代理对象

UserMapperuserMapper = sqlSession.getMapper(UserMapper.class);

 

//根据用户名查找多条用户信息

List<User> listUser =userMapper.findUserByName("zzhua");

System.out.println("---------->>>>>>>>>>>>>>>"+listUser);

 

 

七、     代理对象内部调用selectOne或selectList

如果mapper方法返回单个pojo对象(非集合对象),代理对象内部通过selectOne查询数据库

如果mapper方法返回集合对象,代理对象内部通过selectList查询数据库

 

 

 

 

八、     SqlMapConfig.xml配置文件 各个节点意义及实例

 

1.        加载属性文件

<!-- 加载属性文件 -->

<propertiesresource="db.properties"></properties>

 

实例如下:

把数据库配置信息放在属性文件中

<?xmlversion="1.0" encoding="UTF-8"?>

<!DOCTYPEconfiguration

PUBLIC"-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

<!-- 加载属性文件 -->

<propertiesresource="db.properties"></properties>

<!-- 和spring整合后environments配置将废除 -->

<environments default="development">

<environmentid="development">

<!-- 使用jdbc事务管理,事务控制由mybatis -->

<transactionManagertype="JDBC"/>                        

<!-- 数据库连接池,由mybatis管理 -->

<dataSourcetype="POOLED">

<propertyname="driver" value="${driver}"/>

<propertyname="url" value="${url}"/>

<propertyname="username" value="${username}"/>

<propertyname="password" value="${password}"/>

</dataSource>

</environment>

</environments>

 

<!-- 加载映射文件 -->

<mappers>

<mapperresource="sqlmap/User.xml"/>                

<mapperresource="Mapper/UserMapper.xml"/>

</mappers>

</configuration>

 

属性文件内容如下:

driver=com.microsoft.sqlserver.jdbc.SQLServerDriver

url=jdbc:sqlserver://192.168.50.112:1433;DatabaseName=SchoolSys

username=sa

password=123

 

注意:Mybatis将按照下面的顺序来加载属性

在properties元素体内定义的属性首先被读取

然后读取properties元素中的resource或url中加载属性,它会覆盖以读取的同名属性

最后读取parameterType传递的属性,它会覆盖以读取的同名属性

 

建议:不要在properties元素体内添加任何属性值,只将属性值定义在properties文件中。

properties文件中定义属性名要有一定的特殊性,如:xxxx.xxxx.xxxx

 

 

2.定义别名

SqlMapConfig.xml文件中定义如下:

<!-- 定义别名 -->

<typeAliases>

<!-- 针对单个别名定义

type:类型的路径

alias:别名

 -->

<!--<typeAlias type="cn.zzh.mybatis.po.User"alias="user"></typeAlias> -->

 

<!-- 批量别名定义

指定包名,mybatis自动扫描包中的po类,自定定义别名,别名就是类名(首字母大写小写都可以)

 -->

<packagename="cn.zzh.mybatis.po"></package>

</typeAliases>

 

 

Mapper.xml中使用如下:

<!-- 单条数据查询 -->

<selectid="findUserById" parameterType="java.lang.Integer"resultType="User"> <!-- user(User)使用了SqlMapConfig中定义的别名 -->

SELECT * FROMuserinfo WHERE id = #{value}

</select>

 

测试代码:

@Test

public voidtestFindUserById() throws Exception {

SqlSessionsqlSession = sqlSessionFactory.openSession();

 

//创建UserMapper对象,mybatis自动生成mapper代理对象

UserMapperuserMapper = sqlSession.getMapper(UserMapper.class);

 

//根据ID查询单条用户信息数据

User user =userMapper.findUserById(13);

}

 

3.Mapper.xml文件加载

<!-- 加载映射文件 -->

<mappers>

<mapperresource="sqlmap/User.xml"/>

<!-- 通过resource方式加载,一次加载一个映射文件 -->        

<!--<mapper resource="Mapper/UserMapper.xml"/> -->

 

<!-- 通过Mapper接口加载映射文件

遵循规范:需将mapper接口类名和mapper.xml映射文件名称保持一致,并且在同一个目录下

上面规范的前提是使用的mapper代理的方式

 -->

<mapperclass="cn.zzh.mybatis.mapper.UserMapper" />

</mappers>

 

 

4.用户综合查询

 

定义UserQueryVo综合查询类代码如下:

packagecn.zzh.mybatis.po;

public classUserQueryVo {

//用户查询条件

privateUserCustom userCustom;//UserCustom继承自User

publicUserCustom getUserCustom() {

return userCustom;

}

public voidsetUserCustom(UserCustom userCustom) {

this.userCustom= userCustom;

}

}

 

 

 

Mapper.xml文件代码如下:

<!-- 用户综合查询 -->

<selectid="findUserList"parameterType="cn.zzh.mybatis.po.UserQueryVo"resultType="cn.zzh.mybatis.po.UserCustom">

SELECT * FROMUSERINFO userinfo WHERE userinfo.sex = '${userCustom.sex}' ANDuserinfo.username like '%${userCustom.username}%'

<!-- SELECT* FROM UserInfo userinfo WHERE userinfo.sex = '2' AND userinfo.username like'%zzh%' -->

</select>

 

 

Mapper.java文件代码如下:

 

//用户信息综合查询

publicList<UserCustom> findUserList(UserQueryVo userQueryVo) throws Exception;

 

 

测试代码:

 

@Test

public voidtestFindUserList() throws Exception {

SqlSessionsqlSession = sqlSessionFactory.openSession();

 

//创建UserMapper对象,mybatis自动生成mapper代理对象

UserMapperuserMapper = sqlSession.getMapper(UserMapper.class);

 

//创建查询条件

UserQueryVouserQueryVo = new UserQueryVo();

UserCustomcustom = new UserCustom();

 

custom.setSex("2");

custom.setUsername("zzh");

userQueryVo.setUserCustom(custom);

 

//根据ID查询单条用户信息数据

List<UserCustom>list = userMapper.findUserList(userQueryVo);

System.out.println(list);

}

 

5.输出映射resultType

使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。

如果查询出的列名和pojo中的属性名

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值