cehkongfumybatis入门.docx
- 文档编号:8229205
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:29
- 大小:150.49KB
cehkongfumybatis入门.docx
《cehkongfumybatis入门.docx》由会员分享,可在线阅读,更多相关《cehkongfumybatis入门.docx(29页珍藏版)》请在冰豆网上搜索。
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类所对应的别名,比如 要保持一致,当然这里的resultType还有另外单独的定义方式,后面再说。 2. Configuration.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 --为了返回list类型而定义的returnMap--> 在User.xml中增加查询列表的语句: --返回list的select语句,注意resultMap的值是指向前面定义好的--> select*fromuserwhereuserNamelike#{userName} 在IUserOperation接口中增加方法: publicList 现在在Test类中做测试 privatestaticvoidtest03(){ getUserList("%"); } publicstaticvoidgetUserList(StringuserName){ SqlSessionsession=sqlSessionFactory.openSession(); try{ IUserOperationuserOperation=session.getMapper(IUserOperation.class); List 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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- cehkongfumybatis 入门