Mybatis 学习笔记1

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

什么是 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 节省你时间的地方。我们需要深入了解参数和结果映射,细节部分我们下面来了解。

 

 

 

 

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

posted @ 2016-07-30 22:50  鹏徐翔飞11  阅读(364)  评论(0编辑  收藏  举报