Mybatis框架入门
来源:互联网 发布:红尘男女 网络歌手 编辑:程序博客网 时间:2024/05/18 13:43
一、传统的JDBC程序存在的问题
1、数据库连接,使用时就创建,不适用时就立即释放,对数据库进行频繁的开启和关闭,
造成数据库资源浪费,影响数据库性能
2、将 sql 语句硬编码到 java 代码中,如果 sql 语句修改,还需要重写编译 java 代码,不
便于系统维护
3、从查询的 resultSet 中遍历结果集数据时,将获取表的字段进行硬编码,不利于系统维
护
解决:
1、使用连接池关联数据库里连接
2、将 sql 语句存入到 xml 配置文件中,sql 语句修改无需重写编译
3、将查询的结果集 自动映射成 Java 对象
二、Mybatis框架
mybatis 是一个持久层框架,使程序员依靠mybatis的映射方式,专注于sql语句,自动完成输入输出映射。
示例:
1、工程目录:
2、在 config 资源目录下添加 sqlMapConfig..xml 文件,配置数据源和事物,并加载 Mapper.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!-- 和 spring 整合后,下面配置将会被废弃* --><environments default="development"><environment id="development"><!-- 使用了 JDBC 的事物管理,事物控制由 myBatis 控制 --><transactionManager type="JDBC"/><!-- 使用了连接池,由 myBatis 管理,以后会使用第三方的--><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/yspweb"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><!-- 加载 mapper --><mappers><mapper resource="sqlMap/User.xml"/></mappers></configuration>
3、Mapper 映射文件配置 User.xml
延伸:尽量不使用${}
,${}
表示一个拼接符, 有 sql 注入的风险。 where id=${value} sql解析后变成id=value
where id=#{value} sql解析后变成id="value"
,多了双引号。
mybaties排序时使用order by 动态参数时需要注意,使用${}而不用#{};
4、创建Java具体类
5、先加载 SqlMapConfig 资源文件,再通过 SqlSessionFactoryBuilder 根据资源文件创建会话工厂,有了会话工厂就可以通过 SessionFactory 的 openSession()方法获取到会话 SqlSession 对象。
SqlSession 是线程不安全的(即多个线程访问不能使用同一个对象),在 SqlSession
实现类中除了有接口中的方法(操作数据库的方法)还有数据域属性。
SqlSession 的最佳使用场合是在方法体内,定义成局部变量使用;执行完了数据库的操作后,记得要释放资源,执行更新操作时还要先提交事物。
6、输出映射
1)resultType 为基本类型
Integer,String,map
2)resultMap 自定义类型,一般为pojo
<resultMap id="mybatisId" type="包名.pojo名" <result property="funcId" column="func_id" javaType="String" jdbcType="VARCHAR" /> 。。。。</resultMap>
三、动态sql开发
1.<if test>
标签
第一种,精确查询 <if test="name !=null and name !=''"> and name = #{name} </if>第二种,模糊查询 <if test="fileName != null and fileName !=''"> <bind name="fileName_l" value="'%'+fileName+'%'"/> AND file_name like #{fileName_l} </if>
2.for each标签
1) 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
2) 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
3.)如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在breast里面也是会把它封装成一个Map的,map的key就是参数名。
传入参数为list,要用size()<if test="func_ids != null and func_ids.size()>0"> and fmr.func_id in <foreach collection="func_ids" index="index" item="item" open="(" separator="," close=")"> #{item} </foreach> </if>
传入参数为array,要用length
3.and or 混用需要加括号,因为and的优先级高于or,不加括号会得到不正确的结果
<if test="reviseStatus != null and reviseStatus!=''"> and <if test="reviseStatus==2"> ( revise_status='3' </if> <if test="reviseStatus==2"> or </if> revise_status = #{reviseStatus, jdbcType=INTEGER} <if test="reviseStatus==2"> ) </if> </if>
- 【SSM-MyBatis框架】MyBatis入门
- mybatis框架(1)---mybatis入门
- mybatis框架入门(一)
- MyBatis框架入门
- mybatis框架入门
- MyBatis 框架基础入门
- MyBatis框架入门详解
- mybatis框架入门案例
- MyBatis框架简单入门
- Mybatis框架入门
- 【MyBatis框架】MyBatis入门程序第一部分
- 【MyBatis框架】MyBatis入门程序第二部分
- 【MyBatis框架】MyBatis入门程序第一部分
- 【MyBatis框架】MyBatis入门程序第二部分
- 【MyBatis框架】MyBatis入门程序第一部分
- 【MyBatis框架】MyBatis入门程序第二部分
- Mybatis 框架入门(一)
- Mybatis入门与框架搭建
- git使用——将本地项目上传到GitHub
- CAD快捷键
- 将Web应用性能提高十倍的10条建议
- 《大话设计模式》之模板方法模式
- 冒泡排序法
- Mybatis框架入门
- Spring MVC 向页面传值-Map、Model和ModelMap
- 工厂模式
- 1.6进程的描述
- 冒泡法或起泡法
- 关于spring中接收form表单中对象的多个实例的几种方法
- Python2 socket示例
- Python 从入门到实践 5-3 课后习题
- Java中使用Jedis操作Redis