mybatis入门程序

1 mybatis入门程序
1.1 需求
实现用户查询:
根据用户id(主键)查询用户信息(单条记录)
根据用户名称模糊查询用户信息(多条记录)
用户添加
用户删除
用户修改
 
1.2 导入jar
 
mybatis管网下载(地址:https://github.com/mybatis/mybatis-3/releases
 
mybatis-3.2.7.pdf---操作手册
 
mybatis-3.2.7.jar--核心 jar
 
依赖的jar
 
 
1.3 工程结构
 
 
1.4 log4j.properties(公用文件)
# Global logging configuration,建议开发环境中要用debug
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
 
1.5 SqlMapConfig.xml(公用文件)
通过SqlMapConfig.xml加载mybatis运行环境。

 
 
1.6 根据id查询用户
 
1.6.1 pojoUser.java
 
 
1.6.2 User.xml(重点)
建议命名规则:表名+mapper.xml
早期ibatis命名规则:表名.xml
 
 
1.6.3 编码
 
在测试前,需要创建SqlSessionFactory,然后通过这个去创建sqlSession去操作数据库:

 
 
1.7 根据用户名称模糊查询用户信息
根据用户名称模糊查询用户信息可能返回多条记录。
 
1.7.1 User.xml
 
 
1.7.2 编码
 
1.7.3 使用${}接收参数
可看到,如果模糊查询用#{}来接受传入参数,代码会写得很麻烦而且很难看
下面可用${}来接收参数,因为它接收参数时不会添加任何修饰
注意:测试如果${username}会报错

 
 
1.8 mybatis开发过程小结
1、编写SqlMapConfig.xml
2、编写mapper.xml
定义了statement
3、编程通过配置文件创建SqlSessionFactory
4、通过SqlSessionFactory获取SqlSession
5、通过SqlSession操作数据库
如果执行添加、更新、删除需要调用SqlSession.commit()
6SqlSesion使用完成要关闭
 
 
 
1.9 用户添加
向用户表插入一条记录。
 
1.9.1 User.xml

 
 
1.9.2 编码
 
 
1.9.3 主键返回
需求:user对象插入到数据库后,新记录的主键要通过user对象返回,通过user获取主键值。
 
解决思路:
通过LAST_INSERT_ID()获取刚插入记录的自增主键值:
insert语句执行后,执行select LAST_INSERT_ID()就可以获取自增主键。
 
User.xml修改:

代码:

 
使用mysqluuid机制生成主键:
 
使用uuid生成主键的好处是不考虑数据库移植后主键冲突问题。
注意:uuid()返回的是字符串类型,就是表中id字段要是字符串类型的
 
实现思路:
先查询uuid得到主键,将主键设置到user对象中,将user对象插入数据库。
 
 
 
实现 oracle数据库主键返回,如何做??
oracle没有自增主键机制,使用序列完成主键生成。
 
实现思路:
先查询序列得到主键,将主键设置到user对象中,将user对象插入数据库。
 
 
 
1.10 用户删除和更新
 
 
1.10.1 编码


1.11 Mybatis解决jdbc编程的问题
1、 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
解决:SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。
2、 Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
解决:Sql语句配置在XXXXmapper.xml文件中与java代码分离。
3、 sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。
解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。
4、 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。
解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。
 
 
1.12 mybatishibernate重要区别
企业开发进行技术选型 ,考虑mybatishibernate适用场景。
 
mybatis:入门简单,程序容易上手开发,节省开发成本 。mybatis需要程序员自己编写sql语句,是一个不完全ORM框架,对sql修改和优化非常容易实现 。
mybatis适合开发需求变更频繁的系统,比如:互联网项目。
 
hibernate:入门门槛高,如果用hibernate写出高性能的程序不容易实现。hibernate不用写sql语句,是一个 ORM框架。
hibernate适合需求固定,对象数据模型稳定,中小型项目,比如:企业OA系统。
 
总之,企业在技术选型时根据项目实际情况,以降低成本和提高系统 可维护性为出发点进行技术选型。
 
 
 
 
1.13 总结
 
1.13.1 SqlMapConfig.xml
mybatis全局配置文件,只有一个,名称不固定的,主要mapper.xmlmapper.xml中配置 sql语句
 
1.13.2 mapper.xml
mapper.xml是以statement为单位进行配置。(把一个sql称为一个statement),satatement中配置 sql语句、parameterType输入参数类型(完成输入映射)、resultType输出结果类型(完成输出映射)。
 
还提供了parameterMap配置输入参数类型(过期了,不推荐使用了)
还提供resultMap配置输出结果类型(完成输出映射),明天重点讲通过resultMap完成复杂数据类型的映射(一对多,多对多映射)
 
 
1.13.3 #{}
表示一个占位符,向占位符输入参数,mybatis自动进行java类型和jdbc类型的转换。
程序员不需要考虑参数的类型,比如:传入字符串,mybatis最终拼接好的sql就是参数两边加单引号。
#{}接收pojo数据,可以使用OGNL解析出pojo的属性值
1.13.4 ${}
表示sql的拼接,通过${}接收参数,将参数的内容不加任何修饰拼接在sql中。
${}也可以接收pojo数据,可以使用OGNL解析出pojo的属性值
 
缺点:不能防止sql注入。
 
 
1.13.5 selectOne
用于查询单条记录,不能用于查询多条记录,否则异常:
org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 4
 
 
1.14 selectList
用于查询多条记录,可以用于查询单条记录的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值