java元婴期(22)----java进阶(mybatis(1)---mybatis框架概述&&入门程序)

1.对原生态jdbc程序中问题总结(为啥要用mybatis)

1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响 数据库性能。

设想:使用数据库连接池管理数据库连接。

 

2、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。

设想:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。

 

3、向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。

设想:将sql语句及占位符号和参数全部配置在xml中。

 

4、从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,,不利于系统维护。

设想:将查询的结果集,自动映射成java对象。

2.mybatis框架

1.mybatis是什么?

1.mybatis是一个持久层的框架,是apache下的顶级项目。

2.mybatis托管到goolecode下,再后来托管到github下(https://github.com/mybatis/mybatis-3/releases)。

3.mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要sql语句。

4.mybatis可以将向 preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射

2.mybatis框架

 

 

3.入门程序

1.需求

  • 根据用户id(主键)查询用户信息
  • 根据用户名称模糊查询用户信息
  • 添加用户
  • 删除 用户
  • 更新用户

2.环境

  • java环境:jdk1.7.0_72
  • eclipse:indigo
  • mysql:5.1

mybatis运行环境(jar包):

mybatis-3.2.7.jar:核心包

 

3.log4j.properties

4.SqlMapConfig.xml

配置mybatis的运行环境,数据源、事务等。

5.根据用户id(主键)查询用户信息

1.创建po类

2.映射文件

映射文件命名:

User.xml(原始ibatis命名),mapper代理开发映射文件名称叫XXXMapper.xml,比如:UserMapper.xml、ItemsMapper.xml

在映射文件中配置sql语句。

3.在SqlMapConfig.xml加载映射文件

在sqlMapConfig.xml中加载User.xml:​​​​​​​

4.程序编写

6.根据用户名称模糊查询用户信息

1.映射文件

使用User.xml,添加根据用户名称模糊查询用户信息的sql语句。

2.程序代码

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})

 

7.删除用户

1.映射文件

2.代码

8.更新用户

1.映射文件

2.代码

9.总结

1.parameterType

在映射文件中通过parameterType指定输入 参数的类型

2.resultType

在映射文件中通过resultType指定输出结果的类型。​​​​​​​

3.#{}和${}

#{}表示一个占位符号,#{}接收输入参数,类型可以是简单类型,pojo、hashmap。

如果接收简单类型,#{}中可以写成value或其它名称。

#{}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。

${}表示一个拼接符号,会引用sql注入,所以不建议使用${}

${}接收输入参数,类型可以是简单类型,pojo、hashmap

如果接收简单类型,${}中只能写成value。

${}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。

4.selectOne和selectList

selectOne表示查询出一条记录进行映射。如果使用selectOne可以实现使用selectList也可以实现(list中只有一个对象)。

selectList表示查询出一个列表(多条记录)进行映射。如果使用selectList查询多条记录,不能使用selectOne。

如果使用selectOne报错:

org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 4

5.mybatis和hibernate本质区别和应用场景

hibernate:是一个标准ORM框架(对象关系映射)。入门门槛较高的,不需要程序写sql,sql语句自动生成了。

对sql语句进行优化、修改比较困难的。

应用场景:

         适用与需求变化不多的中小型项目,比如:后台管理系统,erp、orm、oa。

mybatis:专注是sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。mybatis是一个不完全 的ORM框架,虽然程序员自己写sql,mybatis 也可以实现映射(输入映射、输出映射)。

应用场景:

         适用与需求变化较多的项目,比如:互联网项目。

企业进行技术选型,以低成本 高回报作为技术选型的原则,根据项目组的技术力量进行选择。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值