mybatis是一个支持原生sql的持久层框架, 他是由ibatis衍生而来,最近一直在尝试着使用各种框架,了解各大框架中的特性,废话不多说,马上进入正题。
操作环境:
编辑器 : myeclipse
jdk :1.7
数据库 :mysql
maven :3.2.5
下面我把搭建成功后的项目的整体架构:
好!接下来我们就可以进入正题了。
搭建mybatis框架步骤如下:
一:创建一个maven项目,这个从网上一搜就有一大把的教程,为了怕自己写的跑题了,就先不对这个配置做介绍,只要创建一个标准的maven项目即可。
二:项目创建好了之后,咱们就可以开始做一些准备工作了,既然mybatis是一个持久层的框架,那就免不了和数据库打交道,这里咱们用一个最简单的例子来完成这一节的教程。以下是创建数据库的sql
use mybatisdemo;
create table if not exists users(
id INT(11) auto_increment primary key ,
name VARCHAR(11),
age INT(3)
);
insert into users values (1,'张三',2);
没有比上面这个更简单的了,不是吗?好了,从现在开始咱们暂时可以和数据库say goodbye了!
三:回到项目中,继续配置我们的mybatis。在resource目录下创建一个mybaitis的配置文件conf.xml文件,这个文件的作用是告诉mybatis连接数据库需要用到的信息,当然这个名字你可以随便取,但是请不要取成haha.xml或者hehe.xml,否则老大找你了,你可别来喷我哈。
conf.xml
<?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>
<!--
development : 开发模式
work : 工作模式
-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatisDemo"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
</configuration>
四:创建一个实体类对象与数据库中的表做对应。
创建User.java,注意:实体类中需要重写toString(),否则查询出来的对象是一个内存地址。不够直观
package com.myd.entity;
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 + "]";
}
}
五:创建一个mapper,这个类中保存的是你的原生sql代码,查询的方法或者其他crud操作都可写在该文件中,我们可以把它看做一个与数据库打交道的文件。
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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
例如namespace="com.myd.mapping.userMapper"就是com.myd.mapping(包名)+userMapper(userMapper.xml文件去除后缀)
-->
<mapper namespace="com.myd.mapping.userMapper">
<!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复
使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回
User类就是users表所对应的实体类
-->
<select id="findById" parameterType="int" resultType="com.myd.entity.User">
select * from users where id = #{id};
</select>
</mapper>
六:最激动人心的时候到了,测试代码:
test.java
package mbtsDemo;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.myd.entity.User;
public class test {
public static void main(String[] args) {
//mybatis的配置文件
String resource = "conf.xml";
//使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
InputStream is = test.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(is);
//创建能执行映射文件中sql的sqlSession
SqlSession session = sf.openSession(true);
String statement = "com.myd.mapping.userMapper.findById";
User u = session.selectOne(statement,1);
System.out.println(u);
}
}
七:测试结果
User [id=1, name=张三, age=2]
如果你在第四步写实体类时没有重写toString方法,返回的结果是这样
com.myd.entity.User@20c77b27
参考地址:http://www.cnblogs.com/xdp-gacl/p/4261895.html