Mybatis 学习笔记1

时间:2024-11-30 21:04:14

---恢复内容开始---

什么是 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)。配置文件示例:

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias alias="User" type="com.jikexueyuancrm.entity.User"/>
</typeAliases>
<environments default="development"> 默认的环境id为development
<environment id="development">    为environment元素定义id
<transactionManager type="JDBC"/>    事务管理器配置 类型为jdbc
                        

    JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务范围。

             <dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.0.118:3306/jikexueyuancrm"/>
<property name="username" value="admin"/>
<property name="password" value="666666"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/mybatis3/mappers/UserMapper.xml"/>
</mappers>
</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 节省你时间的地方。我们需要深入了解参数和结果映射,细节部分我们下面来了解。

---恢复内容结束---