Mybatis-入门程序(二)
接着上一篇文章《Mybatis入门(一)》我们继续来讲解一下《Mybatis的入门程序(二)》,废话不多说进入正题
【需求】
1、根据用户id(主键)查询用户信息
2、根据用户名称模糊查询用户信息
3、添加用户
4、删除 用户
5、更新用户
【环境】
java环境:jdk1.7.0_72
eclipse:indigo
mysql:5.1
mybatis运行环境(jar包):
从https://github.com/mybatis/mybatis-3/releases下载,3.2.7版本,解压之后有下图的文件
【log4j.properties】
# Global logging configuration
#在开发环境下日志级别要设置成DEBUG,生产环境设置成info或error
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
【工程结构】
SQLMap是存储mapper.xml文件
【SqlMapConfig.xml (全局配置文件)】
配置mybatis的运行环境,数据源、事务等。
【根据用户id(主键)查询用户信息】
1、创建po类
2、映射文件
映射文件命名:
User.xml(原始ibatis命名),mapper代理开发映射文件名称叫XXXMapper.xml,比如:UserMapper.xml、ItemsMapper.xml
在映射文件中配置sql语句。
3、在SqlMapConfig.xml加载映射文件
在sqlMapConfig.xml中加载User.xml:
4、程序编写
// 根据id查询用户信息,得到一条记录结果@Testpublic void findUserByIdTest() throws IOException {// mybatis配置文件String resource = "SqlMapConfig.xml";// 得到配置文件流InputStream inputStream = Resources.getResourceAsStream(resource);// 创建会话工厂,传入mybatis的配置文件信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 通过工厂得到SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 通过SqlSession操作数据库// 第一个参数:映射文件中statement的id,等于=namespace+"."+statement的id// 第二个参数:指定和映射文件中所匹配的parameterType类型的参数// sqlSession.selectOne结果 是与映射文件中所匹配的resultType类型的对象// selectOne查询出一条记录User user = sqlSession.selectOne("test.findUserById", 1);System.out.println(user);// 释放资源sqlSession.close();}
【根据用户名称模糊查询用户信息】
1、映射文件
使用User.xml,添加根据用户名称模糊查询用户信息的sql语句。
<!-- 根据用户名称模糊查询用户信息,可能返回多条resultType:指定就是单条记录所映射的java对象 类型${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中。使用${}拼接sql,引起 sql注入${value}:接收输入 参数的内容,如果传入类型是简单类型,${}中只能使用value--><select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.mybatis.po.User">SELECT * FROM USER WHERE username LIKE '%${value}%'</select>
2、程序代码
// 根据用户名称模糊查询用户列表@Testpublic void findUserByNameTest() throws IOException {// mybatis配置文件String resource = "SqlMapConfig.xml";// 得到配置文件流InputStream inputStream = Resources.getResourceAsStream(resource);// 创建会话工厂,传入mybatis的配置文件信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 通过工厂得到SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// list中的user和映射文件中resultType所指定的类型一致List<User> list = sqlSession.selectOne("test.findUserByName", "小明");System.out.println(list);sqlSession.close();}
【添加用户】
1、映射文件
在 User.xml中配置添加用户的Statement
2、程序代码
// 添加用户信息@Testpublic void insertUserTest() throws IOException {// mybatis配置文件String resource = "SqlMapConfig.xml";// 得到配置文件流InputStream inputStream = Resources.getResourceAsStream(resource);// 创建会话工厂,传入mybatis的配置文件信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 通过工厂得到SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 插入用户对象User user = new User();user.setUsername("王小军");user.setBirthday(new Date());user.setSex("1");user.setAddress("河南郑州");sqlSession.insert("test.insertUser", user);// 提交事务sqlSession.commit();
System.out.println(user.getId());// 获取用户信息主键// 关闭会话sqlSession.close();}
3、自增主键返回
mysql自增主键,执行insert提交之前自动生成一个自增主键。
通过mysql函数获取到刚插入记录的自增主键:LAST_INSERT_ID() ,是insert之后调用此函数。
修改insertUser定义:
4、非自增主键返回(使用uuid())
- 使用mysql的uuid()函数生成主键,需要修改表中id字段类型为string,长度设置成35位。
- 执行思路:先通过uuid()查询到主键,将主键输入 到sql语句中。执行uuid()语句顺序相对于insert语句之前执行。
通过oracle的序列生成主键:
<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">SELECT 序列名.nextval()
</selectKey>insert into user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address})
【删除用户】
1、映射文件
<!-- 删除 用户根据id删除用户,需要输入 id值--><delete id="deleteUser" parameterType="java.lang.Integer">delete from user where id=#{id}</delete>
2、代码
// 根据id删除 用户信息@Testpublic void deleteUserTest() throws IOException {// mybatis配置文件String resource = "SqlMapConfig.xml";// 得到配置文件流InputStream inputStream = Resources.getResourceAsStream(resource);// 创建会话工厂,传入mybatis的配置文件信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 通过工厂得到SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 传入id删除 用户sqlSession.delete("test.deleteUser", 39);// 提交事务sqlSession.commit();// 关闭会话sqlSession.close();}
【更新用户】
1、映射文件
<!-- 根据id更新用户分析:需要传入用户的id需要传入用户的更新信息parameterType指定user对象,包括 id和更新信息,注意:id必须存在#{id}:从输入 user对象中获取id属性值--><update id="updateUser" parameterType="cn.itcast.mybatis.po.User">update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}</update>
2、代码
// 更新用户信息@Testpublic void updateUserTest() throws IOException {// mybatis配置文件String resource = "SqlMapConfig.xml";// 得到配置文件流InputStream inputStream = Resources.getResourceAsStream(resource);// 创建会话工厂,传入mybatis的配置文件信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 通过工厂得到SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 更新用户信息User user = new User();//必须设置iduser.setId(41);user.setUsername("王大军");user.setBirthday(new Date());user.setSex("2");user.setAddress("河南郑州");sqlSession.update("test.updateUser", user);// 提交事务sqlSession.commit();// 关闭会话sqlSession.close();}
【总结】
1、parameterType
在映射文件中通过parameterType指定输入 参数的类型。
2、resultType
在映射文件中通过resultType指定输出结果的类型。
3、 #{}和${}
(1)#{}表示一个占位符号,#{}接收输入参数,类型可以是简单类型,pojo、hashmap。
(2)如果接收简单类型,#{}中可以写成value或其它名称。
(3)#{}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。
(4)${}表示一个拼接符号,会引用sql注入,所以不建议使用${}。
(5)${}接收输入参数,类型可以是简单类型,pojo、hashmap。
(6)如果接收简单类型,${}中只能写成value。
(7)${}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。
4、 selectOne和selectList
(1)selectOne表示查询出一条记录进行映射。如果使用selectOne可以实现使用selectList也可以实现(list中只有一个对象)。
(2)selectList表示查询出一个列表(多条记录)进行映射。如果使用selectList查询多条记录,不能使用selectOne。
如果使用selectOne报错:
org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 4
Mybatis-入门程序(二)相关推荐
- JavaWeb——MyBatis入门程序
一.引言 一般MyBatis与springMVC常常一起使用,而且与hibernate相比有着天然的优势,继续推进. MyBatis应用程序根据XML配置文件创建SqlSessionFactory,S ...
- Mybatis入门程序增删改查操作
学习目标 了解Mybatis的基本知识 熟悉Mybatis的工作原理 掌握Mybatis入门程序的编写 文章目录 1.初始Mybatis 2.Mybatis入门程序 3.Mybatis操作总结 1.初 ...
- Mybatis入门(二)
Mybatis入门(二) 一.利用resultMap 复杂类型映射 1.一对一 2.一对多 3.多对多 二.动态sql构建 三. 延迟加载 四.缓存技术 五.mybatis的反向工程 六.#{}和${ ...
- 使用Eclips开发Mybatis入门程序
MyBatis入门程序 数据库 本程序所需数据库 mybatisuser,表user不再细述. 环境配置 导入jia包,mybatis-3.5.7.jar,mysql-connector-java-5 ...
- MyBatis入门(二)---一对一,一对多
一.创建数据库表 1.1.创建数据表同时插入数据 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.6.27-log : Database - mybati ...
- mybatis入门基础(二)----原始dao的开发和mapper代理开发
阅读目录 一:原始dao开发方法 二:mapper代理方法(只需要mapper接口,相当于dao接口) 承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisS ...
- Mybatis入门程序
Mybatis入门:log4j配置.全局配置.mapper配置.测试类四部分 >log4j配置 #info,error. log4j.rootLogger=debug,stdout # log4 ...
- 【MyBatis框架】MyBatis入门程序第二部分
我们通过写一个简单的MyBatis小项目来在实战中学习MyBatis,接着上一篇继续 我们开始实现需求中的添加和删除用户功能 (1)向数据库中添加用户数据 使用User.xml,加入添加用户的sql语 ...
- 【MyBatis框架】MyBatis入门程序第一部分
为什么80%的码农都做不了架构师?>>> 我们通过写一个简单的MyBatis小项目来在实战中学习MyBatis 1.需求 根据用户id(主键)查询用户信息 根据用户名称模糊查询 ...
- mybatis入门(二)之XML 映射配置文件
转载自 mybatis XML 映射配置文件 MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置(settings)和属性(properties)信息.文档的顶层结构如下: c ...
最新文章
- 基于OpenCV的单目摄像机测距
- MySQL数据库一个字段对应多个值得模糊查询
- API Hooking 的原理
- UA MATH567 高维统计专题1 稀疏信号及其恢复6 随机设计矩阵下LASSO的估计误差
- MFC用代码创建工具栏
- 一分钟了解ArrayList和Vector的区别
- Shiro <shiro:hasPermission >标签不生效,shiro权限不生效原因
- 模块间接口设计的原则
- java中 8进制 10进制 2进制 16进制 相互转换
- 利用matlab程序分别设计一正弦型信号_ARM Mbed数字信号处理
- 热的感觉是顺经络走的
- linux教学之安装python与pip环境
- 华为云服务器搭建PaddlePaddle GPU环境
- 大数据使用的5种主要数据挖掘技术
- API LayoutInflater
- java多文件文件压缩加密下载
- FPGA平台开发基础
- 2018工业互联网峰会在京召开
- Android系统SD卡各类文件夹名称
- Sweet Butter 香甜的黄油
热门文章
- TOP100summit分享实录 | JFrog高欣:Kubernetes is hard!JFrog的Kubernetes实践
- win7计算机的蓝牙,win7电脑蓝牙怎么开
- 软碟通 刻录linux光盘,使用UltraISO软碟通刻录光盘
- 新浪微博API错误代码说明对照表
- 恶搞视频聊天偷拍源码
- Flume+Kafka+Storm+Redis流计算实现wordcount示例
- JavaScript 对象
- 5W2H 分析法
- 和老外聊天、发邮件常用英语缩写。
- python版我的世界怎么去天堂_我的世界中国版手游怎么去天堂 我的世界去天堂代码指令...