cehkongfumybatis入门.docx

上传人:b****6 文档编号:8229205 上传时间:2023-01-30 格式:DOCX 页数:29 大小:150.49KB
下载 相关 举报
cehkongfumybatis入门.docx_第1页
第1页 / 共29页
cehkongfumybatis入门.docx_第2页
第2页 / 共29页
cehkongfumybatis入门.docx_第3页
第3页 / 共29页
cehkongfumybatis入门.docx_第4页
第4页 / 共29页
cehkongfumybatis入门.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

cehkongfumybatis入门.docx

《cehkongfumybatis入门.docx》由会员分享,可在线阅读,更多相关《cehkongfumybatis入门.docx(29页珍藏版)》请在冰豆网上搜索。

cehkongfumybatis入门.docx

cehkongfumybatis入门

以前曾经用过ibatis,这是mybatis的前身,当时在做项目时,感觉很不错,比hibernate灵活。

性能也比hibernate好。

而且也比较轻量级,因为当时在项目中,没来的及做很很多笔记。

后来项目结束了,我也没写总结文档。

已经过去好久了。

但最近突然又对这个ORM工具感兴趣。

因为接下来自己的项目中很有可能采用这个ORM工具。

所以在此重新温习了一下mybatis,因此就有了这个系列的mybatis教程。

什么是mybatis

MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。

MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。

MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(PlanOldJavaObjects,普通的Java对象)映射成数据库中的记录.

orm工具的基本思想

无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:

1.从配置文件(通常是XML配置文件中)得到sessionfactory.

2.由sessionfactory 产生session

3.在session中完成对数据的增删改查和事务提交等.

4.在用完之后关闭session。

5.在java对象和数据库之间有做mapping的配置文件,也通常是xml文件。

一、mybatis开发环境搭建

建立一个叫做sm的web工程,将mysql-connector-java-5.1.21.jar,

mybatis-3.2.2.jar两个jar包拷贝到web工程的lib目录下面,创建mysql数据库sm(注意编码为utf-8),并创建user表,并插入几条数据。

createtableuser(

idint(12)primarykey,

userNamevarchar(16),

userAgevarchar(4),

userAddressvarchar(64)

);

INSERTINTOuser(id,userName,userAge,userAddress)VALUES(0,'summer','100','shanghai);

INSERTINTOuser(id,userName,userAge,userAddress)VALUES(1,'张三','21','tsinghua');

INSERTINTOuser(id,userName,userAge,userAddress)VALUES(2,'李四','18','peking');

INSERTINTOuser(id,userName,userAge,userAddress)VALUES(3,'陈真','78','中国人');

INSERTINTOuser(id,userName,userAge,userAddress)VALUES(4,'霍元甲','103','北京');

到此为止,前期准备工作就完成了。

下面开始真正配置sm项目了。

1.在sm里面创建两个源码目录,分别为src_user,test_src

2.设置sm配置文件:

Configuration.xml,在src_user目录下建立此文件,内容如下

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

>

DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN"

"http:

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

mysql:

//127.0.0.1:

3306/sm"/>

3.建立与数据库对应的javaclass,以及映射文件.

在src_user下建立package:

my.ceh.mybatis.model,并在这个package下建立User类:

packagemy.ceh.mybatis.model;

publicclassUser{

privateintid;

privateStringuserName;

privateStringuserAge;

privateStringuserAddress;

publicintgetId(){

returnid;

}

publicvoidsetId(intid){

this.id=id;

}

publicStringgetUserName(){

returnuserName;

}

publicvoidsetUserName(StringuserName){

this.userName=userName;

}

publicStringgetUserAge(){

returnuserAge;

}

publicvoidsetUserAge(StringuserAge){

this.userAge=userAge;

}

publicStringgetUserAddress(){

returnuserAddress;

}

publicvoidsetUserAddress(StringuserAddress){

this.userAddress=userAddress;

}

}

 

同时建立这个User的映射文件User.xml:

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

>

DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN"

"http:

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

select*fromuserwhereid=#{id}

下面对这几个配置文件解释下:

1.Configuration.xml是mybatis用来建立sessionFactory用的,里面主要包含了数据库连接相关东西,还有java类所对应的别名,比如这个别名非常重要,你在具体的类的映射中,比如User.xml中resultType就是对应这里的。

要保持一致,当然这里的resultType还有另外单独的定义方式,后面再说。

2. Configuration.xml里面的是包含要映射的类的xml配置文件。

3.在User.xml文件里面主要是定义各种SQL语句,以及这些语句的参数,以及要返回的类型等.

开始测试

在test_src源码目录下建立my.ceh.mybatis.test这个package,并建立测试类Test:

packagemy.ceh.mybatis.test;

importjava.io.Reader;

importmy.ceh.mybatis.model.User;

importorg.apache.ibatis.io.Resources;

importorg.apache.ibatis.session.SqlSession;

importorg.apache.ibatis.session.SqlSessionFactory;

importorg.apache.ibatis.session.SqlSessionFactoryBuilder;

publicclassTest{

privatestaticSqlSessionFactorysqlSessionFactory;

privatestaticReaderreader;

static{

try{

reader=Resources.getResourceAsReader("Configuration.xml");

sqlSessionFactory=newSqlSessionFactoryBuilder().build(reader);

}catch(Exceptione){

e.printStackTrace();

}

}

publicstaticSqlSessionFactorygetSession(){

returnsqlSessionFactory;

}

publicstaticvoidmain(String[]args){

SqlSessionsession=sqlSessionFactory.openSession();

try{

Useruser=(User)session.selectOne(

"my.ceh.mybatis.models.UserMapper.selectUserByID",1);

System.out.println(user.getUserAddress());

System.out.println(user.getUserName());

}finally{

session.close();

}

}

}

现在运行这个程序,是不是得到查询结果了。

恭喜你,环境搭建配置成功,接下来第二章,将讲述基于接口的操作方式,增删改查。

二、以接口的方式编程

session.selectOne("my.ceh.mybatis.models.UserMapper.selectUserByID",1)

其实还有更简单的方法,而且是更好的方法,使用合理描述参数和SQL语句返回值的接口(比如IUserOperation.class),这样现在就可以至此那个更简单,更安全的代码,没有容易发生的字符串文字和转换的错误.下面是详细过程:

在src_user源码目录下建立my.ceh.mybatis.inter这个包,并建立接口类IUserOperation,内容如下:

packagemy.ceh.mybatis.inter;

importmy.ceh.mybatis.model.User;

publicinterfaceIUserOperation{

publicUserselectUserByID(intid);

}

请注意,这里面有一个方法名selectUserByID必须与User.xml里面配置的select的id对应(

测试代码如下:

privatestaticvoidtest02(){

SqlSessionsession=sqlSessionFactory.openSession();

try{

IUserOperationuserOperation=session.getMapper(IUserOperation.class);

Useruser=userOperation.selectUserByID

(1);

System.out.println(user.getUserAddress());

System.out.println(user.getUserName());

}finally{

session.close();

}

}

注意:

User.xml文件此时需要作出相应的修改,mapper标签中的namespace属性需要改成

三、实现数据的增删改查

前面已经讲到用接口的方式编程。

这种方式,要注意的一个地方就是。

在User.xml 的配置文件中,mappernamespace="my.ceh.mybatis.inter.IUserOperation",命名空间非常重要,不能有错,必须与我们定义的package和接口一致。

如果不一致就会出错,这一章主要在上一讲基于接口编程的基础上完成如下事情:

1.用mybatis查询数据,包括列表

2.用mybatis增加数据

3.用mybatis更新数据.

4.用mybatis删除数据.

查询数据,前面已经讲过简单的,主要看查询出列表的

查询出列表,也就是返回list,在我们这个例子中也就是List,这种方式返回数据,需要在User.xml里面配置返回的类型resultMap,注意不是resultType,而这个resultMap所对应的应该是我们自己配置的

--为了返回list类型而定义的returnMap-->

在User.xml中增加查询列表的语句:

--返回list的select语句,注意resultMap的值是指向前面定义好的-->

select*fromuserwhereuserNamelike#{userName}

在IUserOperation接口中增加方法:

publicListselectUsers(StringuserName);    

现在在Test类中做测试

privatestaticvoidtest03(){

getUserList("%");

}

publicstaticvoidgetUserList(StringuserName){

SqlSessionsession=sqlSessionFactory.openSession();

try{

IUserOperationuserOperation=session.getMapper(IUserOperation.class);

Listusers=userOperation.selectUsers(userName);

for(Useruser:

users){

System.out.println(user.getId()+":

"+user.getUserName()+":

"+user.getUserAddress());

}

}finally{

session.close();

}

}

 

可以看到,结果成功查询出来。

如果是查询单个数据的话,用第二讲用过的方法就可以了。

用mybatis增加数据 

在IUserOperation接口中增加方法:

publicvoidaddUser(Useruser);

在User.xml中配置

--

执行增加操作的SQL语句。

id和parameterType分别与IUserOperation接口中的addUser方法的名字和

参数类型一致。

以#{name}的形式引用Student参数的name属性,MyBatis将使用反射读取Student参数

的此属性。

#{name}中name大小写敏感。

引用其他的gender等属性与此一致。

useGeneratedKeys设置

为"true"表明要MyBatis获取由数据库自动生成的主键;keyProperty="id"指定把获取到的主键值注入

到Student的id属性

-->

insertintouser(userName,userAge,userAddress)

values(#{userName},#{userAge},#{userAddress})

然后在Test中写测试方法:

//测试增加,增加后,必须提交事务,否则不会写入到数据库.

publicstaticvoidaddUser(){

Useruser=newUser();

user.setUserAddress("人民广场");

user.setUserName("飞鸟");

user.setUserAge("80");

SqlSessionsession=sqlSessionFactory.openSession();

try{

IUserOperationuserOperation=session.getMapper(IUserOperation.class);

userOperation.addUser(user);

mit();

System.out.println("当前增加的用户id为:

"+user.getId());

}finally{

session.close();

}

}

 

用mybatis更新数据

方法类似,先在IUserOperation中增加方法:

publicvoidaddUser(Useruser);

然后配置User.xml 

updateusersetuserName=#{userName},userAge=#{userAge},userAddress=#{userAddress}whereid=#{id}

Test类总的测试方法如下:

publicstaticvoidupdateUser(){

//先得到用户,然后修改,提交。

SqlSessionsession=sqlSessionFactory.openSession();

try{

IUserOperationuserOperation=session.getMapper(IUserOperation.class);

Useruser=userOperation.selectUserByID(4);

user.setUserAddress("原来是魔都的浦东创新园区");

userOperation.updateUser(user);

mit();

}finally{

session.close();

}

}

用mybatis删除数据 

同理,IUserOperation增加方法:

publicvoiddeleteUser(intid);

配置User.xml

deletefromuserwhereid=#{id}

然后在Test类中写测试方法:

/**

*删除数据,删除一定要commit.

*@paramid

*/

publicstaticvoiddeleteUser(intid){

SqlSessionsession=sqlSessionFactory.openSession();

try{

IUserOperationuserOperation=session.getMapper(IUserOperation.class);

userOperation.deleteUser(id);

mit();

}finally{

session.close();

}

}

这样,所有增删改查都完成了,注意在增加,更改,删除的时候要调用mit(),这样才会真正对数据库进行操作,否则是没有提交的。

到此为止,简单的单表操作,应该都会了,接下来的时间讲讲表联合查询,以及结果集的选取。

 

四、实现关联数据的查询

有了前面几章的基础,对一些简单的应用是可以处理的,但在实际项目中,经常是关联表的查询,比如最常见到的多对一,一对多等。

这些查询是如何处理的呢,这一讲就讲这个问题。

我们首先创建一个Article这个表,并初始化数据.

droptableifexistsarticle;

createtablearticle(

idint(11)notnullauto_increment,

useridint(11)notnull,

titlevarcha

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1