MyBatis之一:入门
一、什么是Mybatis
可以简单将mybatis理解为ibatis的升级版本,它是一个java的持久层框架,底层依赖jdbc接口,此持久层框架包含sql maps与data access objects组件。mybatis可以通过xml或者注解的方式用于配置原始映射,将接口和java的pojo映射成数据库中的记录。
下面是mybatis的层级关系,对于理解mybatis的源码有一定的帮助。
二、如何配置MyBatis
开发环境:win10 64位英文版,sql2008r2,eclipse4.4,jdk1.7最新版本号,mavne3.2.1
jar包版本:mybatis3.2.6,sqljdbc4-4.0,log4j-1.2.17、junit-4.11(可选)
步骤:1、在eclipse中新建一个mavne project,选择maven-archetype-quickstart,选择下一步,在新窗口中的artifactid输入项目名称即可。
2、在pom.xml中加入jar包依赖,如下:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <!-- 表示开发的时候引入,发布的时候不会加载此包 --> <scope>test</scope> </dependency> <!-- mybatis核心包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.6</version> </dependency> <!-- 导入SqlServer数据库链接jar包 --> <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>sqljdbc4</artifactId> <version>4.0</version> </dependency> </dependencies>
3、在项目里面src/main/java 这个source folder中新建一个mybatis的配置文件,如下:
<?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> <!-- 注意:每个标签必须按顺序写,不然蛋疼的DTD会提示错误:The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,plugins?,environments?,mappers?)". --> <!-- 数据库文件 --> <properties resource="db.properties" /> <!-- environment 开发模式 work 工作模式 --> <environments default="work"> <environment id="work"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <!-- 注册映射文件 --> <mappers> <!-- 通过xml方式映射 --> <mapper resource="com/mybatis/demo/userMapper.xml" /> <!-- 通过注解方式映射 -->> <mapper class="com.mybatis.demo.IUserMapper" />
</mappers> </configuration>
4、在第三步中注意到了<properties resource="db.properties" />这个,这样写是单独将数据库连接字符串放在一个db.properties文件中,如下:
driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
url =jdbc:sqlserver://localhost:1433;databaseName=DBtest
username =sa
password = //这里的密码为空
到这里,通过在pom.xml中添加jar包依赖、在代码文件夹中添加mybatis访问数据库的配置信息以及自身映射信息,新增一个db.properties存放数据库连接字符串信息,一个基本的mybatis测试项目就搭建起来了,如下图
三、创建一个简单的select查询
1、在sql2008中新建一个数据库dbtest,在里面新建一个表users,里面3个字段id,name,age
2、新建一个users的pojo对象。
package com.mybatis.demo; public class User { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", age=" + age + "]"; } }
3、通过xml方式映射数据
在当前包下面新建一个userMapper.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.mybatis.demo.userMapper"> <!-- 根据ID查询得到一个user对象 --> <select id="getUser" parameterType="int" resultType="com.mybatis.demo.User" resultMap="usermap"> select * from Users where id_id=#{id} </select> <resultMap type="com.mybatis.demo.User" id="usermap"> <!--id 针对主键 --> <id property="id" column="id_id" /> <!-- result针对主键之外的字段 --> <!-- 如果column写错了,返回值为类型默认值 <result property="name" column="name_s" /> --> <result property="name" column="name_n" /> <result property="age" column="age_a" /> </resultMap> </mapper>
4、通过注解方式映射数据
在当前包下面新建一个IUserMapper接口
package com.mybatis.demo; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import com.mybatis.demo.*; public interface IUserMapper { @Select("select * from Users where id_id =#{id}") @Results({ @Result(property="id", column="id_id"), @Result(property="name" ,column="name_n"), @Result(property="age" ,column="age_a") }) public User getById(int id); }
5、新建一个test类
package com.mybatis.demo; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class test { public static void main(String[] args) throws IOException { //1、加载配置文件 String resource = "conf.xml"; InputStream inputStream = test.class.getClassLoader().getResourceAsStream(resource); //2、构建sqlSession的工厂 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //3、创建能执行映射文件中sql的sqlSession SqlSession session = sessionFactory.openSession(); //4、映射sql的标识字符串 String statement = "com.mybatis.demo.userMapper.getUser"; //5、执行查询 User user1 = session.selectOne(statement, 56); System.out.println("xml方式:"+user1); IUserMapper userMapper = session.getMapper(IUserMapper.class); User user2 = userMapper.getById(56); System.out.println("注解方式:"+user2); //6、关闭session对象 session.close(); } }
6、需要注意的几个地方
6.1、需要在mybatis的配置文件中,上文中是conf.xml,在mappers节点中注册映射文件,可以以xml或者注解方式,如下
<mapper resource="com/mybatis/demo/userMapper.xml" /> 这里的resource是xml的文件路径
<mapper class="com.mybatis.demo.IUserMapper" /> 这里的class是接口的全类名
这两种方式任选其一即可。
6.2、列别明映射,同样要么是xml方式要么是注解方式,如下
<select id="" resultMap="usermap"></select>
<resultMap type="" id="usermap"><id property="" column=""/><result/></resultMap>
@Results({ @Result(property="", column="")}
其中property表示pojo中的属性,column表示数据库表字段
6.3、在通过xml方式执行sql语句的参数statement
String statement = "com.mybatis.demo.userMapper.getUser";
这里可以简单的理解为userMapper的全类名加上userMapper.xml文件中的节点ID,如图
基本上主要注意上述3个问题,那么一个基于mybatis的简单CRUD操作可以顺利完成。