Mybatis开发环境搭建
1、什么是Mybatis
是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
2、Mybatis的优点及缺点
- 优点:
- 简单 易学
- 灵活
- 解除sql与程序代码的耦合
- 缺点:
- 编写SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此。
- SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。
- 框架还是比较简陋,功能尚有缺失
3、加载原理
MyBatis应用程序根据XML配置文件创建SqlSessionFactory,SqlSessionFactory在根据配置,配置来源于两个地方,一处是配置映射文件,一处是Java代码的注解,获取一个SqlSession。SqlSession包含了执行sql所需要的所有方法,可以通过SqlSession实例直接运行映射的sql语句,完成对数据的增删改查和事务提交等,用完之后关闭SqlSession。
4、核心接口对象
SqlSessionFactory 会话工厂对象
SqlSession 对应着一次数据库会话,用于执行持久化操作的对象,类似于jdbc中的Connection
5、环境搭建
- 添加相应的Jar包(mybatis jdbc)
- src添加mybatis的配置文件(conf.xml)数据库连接属性文件(*.properties)
- 实体类映射
- 定义操作表sql映射文件*mapper.xml,返回结果集resultType或resultMap。
- 在conf.xml文件中注册*mapper.xml文件
- 测试(sqlSession实例来直接执行已映射的sql语句)
6、输出SQL语句设置(Java工程可以测试,web工程在servlet里面)
- 加入log4j.jar
- src目录log4j.properties属性文件
7、实现增删改查操作
1、实现查询
-
根据主键查询返回一个Bank对象(resultType=“com.pojo.bank”)
<select id="selectbankuserbyid" resultType="com.pojo.BankUser" parameterType="int"> select id,name,tel,money from bankuser where id= #{id} </select>
-
根据主键查询返回一个map对象(resultType=“hashmap”)
<select id="selmapById" resultType="map"> select id,username from bank where id=1 </select>
-
返回一个Bank对象(使用resultMap=“bankmap”****指向一个resultMap的id**)
-
返回一个Map对象(使用resultMap=“bankmap”****指向一个resultMap的id**)
-
返回一个List对象
-
查询参数设置为基本类型查询
-
<!-- 查询条件为基本类型 --> <select id="selbankwherea" resultType="com.bean.Bank" parameterType="int"> <!-- #{id},#{ldjlfjdl} 如果是一个基本类型参数,可以任意写 --> select id,username from bank where id < #{id} </select>
-
-
参数设置为对象查询
<!-- 查询条件如果有多个,封装为对象参数进行查询 --> <select id="selbankwhereb" resultType="com.bean.Bank" parameterType="com.bean.Bank"> <!-- #{id},#{username} 必须是parameterType="com.bean.Bank"对象里面属性,且有get、set --> select id,username from bank where id < #{id} and username= #{username} </select>
-
参数map集合
<!-- 查询条件如果有多个,封装为map参数进行查询 -->
<select id="selbankwherec" resultType="com.bean.Bank"
parameterType="map">
<!-- #{mapid},#{mapmoney} 必须是parameterType="map"里面的键的名字 -->
select id,username from bank where id < #{mapid} and money <
#{mapmoney}
</select>
2、增加数据
-
参数为对象
-
参数为Map集合
-
实现修改数据
String sqlid="com.pojo.Bank.updateBank"; Bank bank= new Bank(); bank.setid(4); int a=session.update(sqlid,bank); session.commit(); //提交事务
-
执行删除数据(同修改)
-
MyBatis中parameterType传入参数的方式:
-
单参数:各种Java的基本数据类型:包含int,String,Date等。只能传入一个。通过#{参数名} 获取传入的值
-
多参数:一种是使用Map集合(parameterType 可以是别名或完全限定名,map或者java.util.Map,这两个都是可以,#{键}获取),另一种是使用JavaBean(#{属性}),还可以传list集合,一般结合in使用(后面动态sql讲解)
-
实现数据的增删改查(接口方式)
接口方式的注意点:
- 接口的方法名字和映射文件里面的id一致
- 映射文件namespace=接口的路径
过程:
- 增加接口(接口的方法与映射文件的id相等)
- 增加接口的映射文件*Mapper.xml【必须:namespace=接口的类路径
- Mybatis配置文件增加对接口的映射
- 测试:
用mybatis查询数据