




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、孤傲苍狼只为找方法,不为失败找借口!MyBatis 学结(一)MyBatis 快速入门一、Mybatis 介绍MyBatis 是一个支持普通SQL,过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC 代码和参数的手工设置以及对结果集的检索封装。MyBatis 可以使用简单的 XML 或注解用于配置和原始,将接口和 Java的POJO(Plain Old Java Objects,普通的Java 对象)映射成数据库中的。二、mybatis 快速入门2.1、准备开发环境1、创建测试项目,普通java 项目或者是JavaWeb 项目均可,如下图所示:2、添加相应的 jar 包【
2、mybatis】mybatis-3.1.1.jar【MYSQL 驱动包】mysql-connector-java-5.1.7-bin.jar3、创建数据库和表,MySQL 数据库SQL如下:1 create database mybatis;2 use mybatis;3 CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);4 INSERT INTO users(NAME, age) VALUES('孤傲苍狼', 27);5 INSERT INTO users(NAME
3、, age) VALUES('白虎神皇', 27);将 SQL在 MySQL 数据库中成创建数据库和表的操作,如下:到此,前期的开发环境准备工作全部完成。2.2、使用MyBatis表中的数据1、添加Mybatis 的配置文件conf.xml在 src 目录下创建一个 conf.xml 文件,如下图所示:conf.xml 文件中的内容如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//DT
4、D Config 3.0/EN" ""> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <!- 配置数据库连接信息 -> <dataSource type="POOLED"> <property name=&quo
5、t;driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql:/localhost:3306/mybatis" /> <property name="username" value="root" /> <property name="password" value="XDP" /> </dataSo
6、urce> </environment> </environments> </configuration>2、定义表所对应的实体类,如下图所示:User 类的代码如下: package me.gacl.domain; /* 4 * author gacl* users 表所对应的实体类 */ public class User /实体类的属性和表的字段名称一一对应 private int id; private String name; private int age; public int getId() return id; public void
7、 setId(int id) this.id = id; public String getName() return name; public int getAge() return age; public void setAge(int age) this.age = age; 37 38Override public String toString() return "User id=" + id + ", name=" + name + ", age=" + age + "" 3、定义操作users 表的s
8、ql文件userMapper.xml创建一个 me.gacl.mapping 包,专门用于存放sql文件,在创建一个userMapper.xml 文件,如下图所示:userMapper.xml 文件的内容如下: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//DTD Mapper 3.0/EN" ""> <!- 为这个mapper 指定一个唯一的namespace,namesp
9、ace的值习惯上设置成+sql文件名,这样就能够保证namespace 的值是唯一的 例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping()+userMapper(userMapper.xml 文件去除后缀) -> <mapper namespace="me.gacl.mapping.userMapper"><!- 在select中编写的SQL 语句, 设置select 的 id 属性为 getUser,id 属性值必须是唯一的,不能够重复使用parameterTyp
10、e 属性指明时使用的参数类型,resultType 属性指明返回的结果集类型resultType="me.gacl.domain.User"就表示将结果封装成一个User 类的对象返回User 类就是users 表所对应的实体类-> <!-根据id得到一个 user 对象-> <select id="getUser" parameterType="int" resultType="me.gacl.domain.User"> select * from users where id=#i
11、d</select></mapper>4、在conf.xml 文件中userMapper.xml 文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//DTD Config 3.0/EN" ""> <configuration> <environments default="development">&l
12、t;environment id="development"><transactionManager type="JDBC" /> <!- 配置数据库连接信息 -><dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" />10<property name="url" value="jdbc:mysql
13、:/localhost:3306/mybatis" /><property name="username" value="root" /><property name="password" value="XDP" /></dataSource> </environment> </environments> <mappers> <!- userMapper.xml 文件,userMapper.xml 位于me.gacl.ma
14、pping 这个包下,所以resource 写成me/gacl/mapping/userMapper.xml-><mapper resource="me/gacl/mapping/userMapper.xml"/></mappers></configuration>5、编写测试代码:执行定义的select 语句创建一个 Test1 类,编写如下的测试代码:package me.gacl.test;import java.io.IOException;import java.io.InputStream;import java.io.
15、Reader;import me.gacl.domain.User;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;Import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class Test1 public static void main(String args) throws IOException
16、/mybatis 的配置文件 String resource = "conf.xml" /使用类加载器加载mybatis 的配置文件(它也加载关联的文件) InputStream is = Test1.class.getClassLoader().getResourceAsStream(resource); /构建sqlSession 的工厂 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); /使用MyBatis 提供的 Resources 类加载mybatis的配置文件
17、(它也加载关联的文件) /Reader reader = Resources.getResourceAsReader(resource); /构建sqlSession 的工厂 /SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader); /创建能执行文件中 sql 的 sqlSession SqlSession session = sessionFactory.openSession(); /* *sql 的标识字符串, * me.gacl.mapping.userMapper 是userMa
18、pper.xml 文件中mapper的namespace 属性的值, * getUser 是select的id 属性值,通过select的id 属性值就可以找到要执行的SQL */ String statement = "me.gacl.mapping.userMapper.getUser"/sql 的标识字符串 /执行返回一个唯一 user 对象的sql User user = session.selectOne(statement, 1); System.out.println(user); 执行结果如下:可以看到,数据库中的已经出来了。MyBatis 学结(二)使用M
19、yBatis 对表执行CRUD 操作上一篇博文MyBatis 学结(一)MyBatis 快速入门中我们讲了如何使用Mybatisusers 表中的数据,算是对MyBatis 有一个初步的入门了,今天讲解一下如何使用MyBatis 对users 表执行CRUD 操作。本文中使用到的测试环境是上一篇博文中的测试环境。一、使用MyBatis 对表执行CRUD 操作基于 XML 的实现1、定义 sqlxml 文件userMapper.xml 文件的内容如下: <?xml version="1.0" encoding="UTF-8" ?><!DO
20、CTYPE mapper PUBLIC "-//DTD Mapper 3.0/EN" ""> <!- 为这个mapper 指定一个唯一的namespace,namespacenamespace 的值是唯一的 例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping()+userMapper(userMapper.xml 文件去除后缀) -> <mapper namespace="me.gacl.mapping.userMa
21、pper"><!- 在select中编写的SQL 语句, 设置select 的 id 属性为 getUser,id 属性值必须是唯一的,不能够重复 使用parameterType 属性指明时使用的参数类型,resultTyperesultType="me.gacl.domain.User"就表示将结果封装成一个User 类的对象返回 User 类就是 users 表所对应的实体类 -> <!-根据id得到一个 user 对象 14-> <select id="getUser" parameterType=&q
22、uot;int"resultType="me.gacl.domain.User"> select * from users where id=#id </select>属性指明返回的结果集类型的值习惯上设置成+sql文件名,这样就能够保证 <!- 创建用户(Create) -> <insert id="addUser" parameterType="me.gacl.domain.User"> insert into users(name,age) values(#name,#age)
23、 </insert> <!- 删除用户(Remove) -> <delete id="deleteUser" parameterType="int"> delete from users where id=#id </delete> <!- 修改用户(Update) -> <update id="updateUser" parameterType="me.gacl.domain.User"> update users set name=#nam
24、e,age=#age where id=#id </update> <!-全部用户-> <select id="glUsers" resultType="me.gacl.domain.User"> select * from users </select> </mapper>单元测试类代码如下:package me.gacl.test; import java.util.List; import me.gacl.domain.User; import me.gacl.util.MyBatisUt
25、il; import org.apache.ibatis.session.SqlSession; import org.junit.Test; public class TestCRUDByXmlMapper Test public void testAdd(); /SqlSession sqlSession = MyBatisUtil.getSqlSession(false); SqlSession sqlSession = MyBatisUtil.getSqlSession(true); * me.gacl.mapping.userMapper 是userMapper.xml 文件中map
26、per的namespace 属性的值,* addUser 是insert的 id 属性值,通过insert的id 属性值就可以找到要执行的 SQL/*16*sql 的标识字符串, */ String statement = "me.gacl.mapping.userMapper.addUser"/sql 的标识字符串 User user = new User(); user.setName("用户孤傲苍狼"); user.setAge(20); /执行操作 int retResult = sqlSession.insert(statement,user)
27、; /手动提交事务 /sqlSmit(); /使用SqlSessionSQL 之后需要关闭SqlSession sqlSession.close(); System.out.println(retResult); Test public void testUpdate() SqlSession sqlSession = MyBatisUtil.getSqlSession(true); /* * me.gacl.mapping.userMapper 是userMapper.xml 文件中mapper的namespace 属性的值,* updateUser 是update的id 属性值,通过upd
28、ate 标签的id 属性值就可以找到要执行的 SQL */ String statement = "me.gacl.mapping.userMapper.updateUser"/sql 的标识字符串 User user = new User(); user.setId(3); user.setName("孤傲苍狼"); user.setAge(25); /执行修改操作 int retResult = sqlSession.update(statement,user); /使用SqlSessionSqlSessionSQL 之后需要关闭 sqlSessio
29、n.close(); System.out.println(retResult); Test*sql 的标识字符串, public void testDelete() SqlSession sqlSession = MyBatisUtil.getSqlSession(true); /* *sql 的标识字符串, * me.gacl.mapping.userMapper 是userMapper.xml 文件中mapper的namespace 属性的值,* deleteUser 是delete的id 属性值,通过delete 标签的id 属性值就可以找到要执行的 SQL */ String sta
30、tement = "me.gacl.mapping.userMapper.deleteUser"/sql 的标识字符串 /执行删除操作 int retResult = sqlSession.delete(statement,5); /使用SqlSessionSqlSessionSQL 之后需要关闭 sqlSession.close(); System.out.println(retResult); Test SqlSession sqlSession = MyBatisUtil.getSqlSession(); /* *sql 的标识字符串, * me.gacl.mappi
31、ng.userMapper 是userMapper.xml 文件中mapper的namespace 属性的值,* glUsers 是 select的 id 属性值,通过select 标签的id 属性值就可以找到要执行的 SQL */ String statement = sql的标识字符串 /执行操作,将结果自动封装成List<User>返回 List<User> lstUsers = sqlSession.selectList(statement); /使用SqlSessionSQL 之后需要关闭SqlSession sqlSession.close(); Syste
32、m.out.println(lstUsers); "me.gacl.mapping.userMapper.glUsers"/public voidtestGl() 二、使用MyBatis 对表执行CRUD 操作基于注解的实现1、定义sql的接口UserMapperI 接口的代码如下:package me.gacl.mapping; import java.util.List; import me.gacl.domain.User; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.an
33、notations.Insert; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; /*11 * author gacl * 定义sql的接口,使用注解指明方法要执行的 SQL */ public interface UserMapperI /使用Insert 注解指明add 方法要执行的 SQL Insert("insert into users(name, age) values(#name, #age)") public int add(
34、User user); /使用Delete 注解指明deleteById 方法要执行的SQL Delete("delete from users where id=#id") public int deleteById(int id); /使用Update 注解指明 update 方法要执行的SQL Update("update users set name=#name,age=#age where id=#id") public int update(User user); /使用Select 注解指明 getById 方法要执行的SQL Select
35、("select * from users where id=#id") public User getById(int id); /使用Select 注解指明 gl 方法要执行的SQL Select("select * from users") public List<User> gl(); 需要说明的是,我们不需要UserMapperI 接口去编写具体的实现类代码,这个具体的实现类由MyBatis 帮我们动态构建出来,我们只需要直接拿来使用即可。2、在conf.xml 文件中这个接口<?xml version="1.0&q
36、uot; encoding="UTF-8"?><!DOCTYPE configuration PUBLIC "-//DTD Config 3.0/EN" ""> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /&
37、gt; <!- 配置数据库连接信息 -> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql:/localhost:3306/mybatis" /> <property name="username" value="roo
38、t" /> <property name="password" value="XDP" /> </dataSource> </environment> </environments> <mappers> <!- userMapper.xml 文件, userMapper.xml 位于me.gacl.mapping 这个包下,所以resource 写成me/gacl/mapping/userMapper.xml-> <mapper resource="m
39、e/gacl/mapping/userMapper.xml"/> <!-UserMapper接口-> <mapper class="me.gacl.mapping.UserMapperI"/> </mappers> </configuration>单元测试类的代码如下: package me.gacl.test; import java.util.List; import me.gacl.domain.User; import me.gacl.mapping.UserMapperI; import me.gac
40、l.util.MyBatisUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; public class TestCRUDByAnnotationMapper Test public void testAdd() SqlSession sqlSession = MyBatisUtil.getSqlSession(true); /得到UserMapperI 接口的实现类对象,UserMapperI 接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建
41、出来UserMapperI mapper = sqlSession.getMapper(UserMapperI.class); User user = new User(); user.setName("用户xdp"); user.setAge(20); int add = mapper.add(user); /使用SqlSessionSqlSessionSQL 之后需要关闭 sqlSession.close(); System.out.println(add); Test public void testUpdate() SqlSession sqlSession = M
42、yBatisUtil.getSqlSession(true); /得到UserMapperI 接口的实现类对象,UserMapperI 接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来UserMapperI mapper = sqlSession.getMapper(UserMapperI.class); User user = new User(); user.setId(3); user.setName("孤傲苍狼_xdp"); user.setAge(26); /执行修改操作 int retResult =
43、mapper.update(user); /使用SqlSessionSQL 之后需要关闭SqlSession38sqlSession.close(); System.out.println(retResult); Test public void testDelete() SqlSession sqlSession = MyBatisUtil.getSqlSession(true); /得到UserMapperI 接口的实现类对象,UserMapperI 接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来UserMapperI mapp
44、er = sqlSession.getMapper(UserMapperI.class); /执行删除操作 int retResult = mapper.deleteById(7); /使用SqlSessionSqlSessionSQL 之后需要关闭 sqlSession.close(); System.out.println(retResult); Test public void testGetUser() SqlSession sqlSession = MyBatisUtil.getSqlSession(); /得到UserMapperI 接口的实现类对象,UserMapperI 接口的
45、实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来UserMapperI mapper = sqlSession.getMapper(UserMapperI.class); /执行操作,将结果自动封装成 User 返回 User user = mapper.getById(8); /使用 SqlSessionSQL 之后需要关闭 sqlSession.close(); System.out.println(user); Test public void testGl() SqlSession sqlSession = MyBatisUtil.
46、getSqlSession(); /得到UserMapperI 接口的实现类对象,UserMapperI 接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来UserMapperI mapper = sqlSession.getMapper(UserMapperI.class); /执行操作,将结果自动封装成List<User>返回SqlSessionmapper.gl(); /使用SqlSessionSQL 之后需要关闭SqlSession sqlSession.close() System.out.println(lstU
47、sers); 用到的 MyBatisUtil 工具类代码如下:package me.gacl.util; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class MyBatisUtil /* * 获取SqlSessionFactory * return SqlSe
48、ssionFactory */List<User> lstUsers = public static SqlSessionFactory getSqlSessionFactory() String resource = "conf.xml" InputStream is = MyBatisUtil.class.getClassLoader().getResourceAsStream(resource); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); return fac
49、tory; /* * 获取SqlSession * return SqlSession */ public static SqlSession getSqlSession() return getSqlSessionFactory().openSession(); /* * 获取SqlSession示创建的SqlSessionSQL 之后会自动提交事SQL 之后自动提交事务,这时就需要我们手动调用sqlSmit()提交事务 * return SqlSession */ public static SqlSession getSqlSession(boolean isAutoCommit) re
50、turn getSqlSessionFactory().openSession(isAutoCommit); 以上的相关代码是全部测试通过的,关于使用MyBatis 对表执行CRUD 操作的内容就这么多。分类:Mybatis:MyBatis 学结务*false 表示创建的SqlSession 对象在对象在* param isAutoCommit*true 表只为找方法,不为失败找借口!MyBatis 学结(三)优化 MyBatis 配置文件中的配置一、连接数据库的配置单独放在一个properties 文件中之前,我们是直接将数据库的连接配置信息写在了MyBatis 的conf.xml 文件中,
51、如下: <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration PUBLIC "-//DTD Config 3.0/EN" ""> 3 <configuration> 4<environments default="development"> 5<environment id="development"> 6<tra
52、nsactionManager type="JDBC" /> 7<!- 配置数据库连接信息 -> 8<dataSource type="POOLED"> value="com.mysql.jdbc.Driver" />9<property name="driver"value="jdbc:mysql:/localhost:3306/mybatis" />value="root" />value="XDP"
53、; />13</dataSource>14</environment>15</environments>1617 </configuration>其实我们完全可以将数据库的连接配置信息写在一个properties 文件中,然后在conf.xml 文件中properties 文件,具体做法如下:1、在src 目录下新建一个 perties 文件,如下图所示:12<property name="password"11<property name="username"10<pr
54、operty name="url"在perties 文件编写连接数据库需要使用到的数据库驱动,连接URL 地址,用户名,如下:1 driver=com.mysql.jdbc.Driver2 url=jdbc:mysql:/localhost:3306/mybatis3 name=root4 password=XDP2、在MyBatis 的conf.xml 文件中perties文件,如下:<?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE con
55、figuration PUBLIC "-//DTD Config 3.0/EN" 3 <configuration> 4 5<!- perties 配置文件 -> 6<properties resource="perties"/> 7<!- 8development : 开发模式 11<environments default="development">12<environment id="development&qu
56、ot;>13<transactionManager type="JDBC" />9work : 工作模式 10->"">perties 配置文件中配置的值 ->value="$driver" />value="$url" />value="$name" />value="$password" />21</dataSource>22</environment>23</envir
57、onments>2425 </configuration>二、为实体类定义别名,简化 sqlxml 文件中的之前,我们在 sqlxml 文件中的实体类时,需要写上实体类的全类名(+类名),如下:20<property name="password"19<property name="username"18<property name="url"17<property name="driver"16<!- value属性值15<dataSource type=&q
58、uot;POOLED">14<!- 配置数据库连接信息 -><!- 创建用户(Create) -><insert id="addUser" parameterType="me.gacl.domain.User"> insert into users(name,age) values(#name,#age)</insert>parameterType="me.gacl.domain.User"这里写的实体类User 的全类名 me.gacl.domain.User,每次都写这么一长串内容挺麻烦的,而我们希望能够简写成下面的形式<inse
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 监理工程师的专业技能提升与继续教育考核试卷
- 水果产品采购协议
- 有线电视传输网络工程技术考核试卷
- 听见你的心心理健康教育
- 空调器热泵空调技术进展考核试卷
- 耐火土石矿山环境保护与矿山环境保护法规完善考核试卷
- 小儿大面积烧伤的护理
- 毛皮制品的智能制造技术考核试卷
- 畜牧业职业培训与技能鉴定体系考核试卷
- 整车生产中的非金属成型工艺考核试卷
- 2025年吉林省民航机场集团长白山机场公司招聘笔试参考题库附带答案详解
- 2024年全国统一高考英语试卷(新课标Ⅰ卷)含答案
- 波形梁钢护栏检测记录表
- 大田作物生产技术标
- 数学命题教学设计课件
- 叶芝《当你老了》赏析课件上课讲义
- 护士角色的转换与适应
- 小学后进生转化记录表4篇-后进生转化
- 危险化学品生产经营企业安全知识培训
- 混凝土构件之梁配筋计算表格(自动版)
- 自制饮品操作流程
评论
0/150
提交评论