---恢复内容开始---
什么是 MyBatis ?
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
安装
要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可。
如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>x.x.x</version> </dependency>
核心为两个配置文件:
一个为config.xml 也就是Mybatis的配置文件
一个为XXXMapper.xml 也就是实体类的映射文件
XML 配置文件(configuration.XML)中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务范围和控制方式的事务管理器(TransactionManager)。配置文件示例:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <typeAliases> 7 <typeAlias alias="User" type="com.jikexueyuancrm.entity.User"/> 8 </typeAliases> 9 <environments default="development"> 默认的环境id为development 10 <environment id="development"> 为environment元素定义id 11 <transactionManager type="JDBC"/> 事务管理器配置 类型为jdbc
JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务范围。
12 <dataSource type="POOLED"> 13 <property name="driver" value="com.mysql.jdbc.Driver"/> 14 <property name="url" value="jdbc:mysql://192.168.0.118:3306/jikexueyuancrm"/> 15 <property name="username" value="admin"/> 16 <property name="password" value="666666"/> 17 </dataSource> 18 </environment> 19 </environments> 20 <mappers> 21 <mapper resource="com/mybatis3/mappers/UserMapper.xml"/> 22 </mappers> 23 </configuration>
实体类User:
public class User { private int id; private String username; private String password; public String toString() { return "id: " +id+ " username: "+username +" password "+password; ...省略get,set方法 } }
映射文件UserMaper.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.mybatis3.mappers.UserMapper"> <select id="getUserById" parameterType="int" resultType="User"> select * from User where id=#{id} </select> <insert id="addUser" useGeneratedKeys="true" keyProperty="id" parameterType="User"> insert into User(username,password) values(#{username},#{password}) </insert> <update id="updateUser"> update user set username=#{username}, password=#{password} where id=#{id} </update> <delete id="deleteUser" parameterType="int"> delete from User where id=#{id} </delete> </mapper>
输出:
2016-07-30 22:53:02,762 [main] DEBUG [com.mybatis3.mappers.UserMapper.getUserById] - ==> Preparing: select * from User where id=? 2016-07-30 22:53:02,807 [main] DEBUG [com.mybatis3.mappers.UserMapper.getUserById] - ==> Parameters: 2(Integer) 2016-07-30 22:53:02,838 [main] DEBUG [com.mybatis3.mappers.UserMapper.getUserById] - <== Total: 1 2016-07-30 22:53:02,840 [main] DEBUG [com.mybatis3.mappers.UserMapper.updateUser] - ==> Preparing: update user set username=?, password=? where id=? 2016-07-30 22:53:02,841 [main] DEBUG [com.mybatis3.mappers.UserMapper.updateUser] - ==> Parameters: wangwu(String), dsfsfs(String), 1(Integer) 2016-07-30 22:53:02,879 [main] DEBUG [com.mybatis3.mappers.UserMapper.updateUser] - <== Updates: 1 id: 2 username: hehe password 123123
select
查询语句是 MyBatis 中最常用的元素之一,光能把数据存到数据库中价值并不大,如果还能重新取出来才有用,多数应用也都是查询比修改要频繁。对每个插入、更新或删除操作,通常对应多个查询操作。这是 MyBatis 的基本原则之一,也是将焦点和努力放到查询和结果映射的原因。简单查询的 select 元素是非常简单的。比如:
<select id="selectPerson" parameterType="int" resultType="hashmap"> SELECT * FROM PERSON WHERE ID = #{id} </select>
这个语句被称作 selectPerson,接受一个 int(或 Integer)类型的参数,并返回一个 HashMap 类型的对象,其中的键是列名,值便是结果行中的对应值。
注意参数符号:#{id}
这就告诉 MyBatis 创建一个预处理语句参数,通过 JDBC,这样的一个参数在 SQL 中会由一个“?”来标识,并被传递到一个新的预处理语句中,就像这样:
// Similar JDBC code, NOT MyBatis… String selectPerson = "SELECT * FROM PERSON WHERE ID=?"; PreparedStatement ps = conn.prepareStatement(selectPerson); ps.setInt(1,id);
当然,这需要很多单独的 JDBC 的代码来提取结果并将它们映射到对象实例中,这就是 MyBatis 节省你时间的地方。我们需要深入了解参数和结果映射,细节部分我们下面来了解。
---恢复内容结束---