您的位置:首页 > 其它

Mybatis搭建过程详解

2015-10-31 19:49 357 查看
学习完了SSH框架后,发现企业中使用Mybatis得也很多。所以学习了一下Mybatis.下面主要介绍Mybatis的搭建过程

一:新建Web项目

二:修改项目的编码UTF-8

三:拷贝Jar包



四:确定使用底层架构,比如使用三层,然后根据架构要求,新建各个sourcefolder以及下面的package



五:创建User和Address实体
User:

package com.cars.mybatis.domain;
import java.util.List;
public class User {
private int id;
private String username;
private String password;
private String nickname;
private int type;
private List<Address> address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public List<Address> getAddress() {
return address;
}
public void setAddress(List<Address> address) {
this.address = address;
}

}
Address:

package com.cars.mybatis.domain;
public class Address {
private int id;
private String name;
private String phone;
private String postcode;
private User user;
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 String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getPostcode() {
return postcode;
}
public void setPostcode(String postcode) {
this.postcode = postcode;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}

}
六:创建init.sql,并在mysql中执行

drop database if exists mybatis1103;
create database mybatis1103;
grant all on mybatis1103.* to 'root'@'localhost' identified by 'root';
use mybatis1103;
create table t_user(
id int(11) primary key auto_increment,
username varchar(100),
password varchar(100),
nickname varchar(100),
type int(5)
);

create table t_address(
id int(11) primary key auto_increment,
name varchar(255),
phone varchar(100),
postcode varchar(100),
user_id int(11),
constraint foreign key(user_id) references t_user(id)
);
七:配置mybatis-config.xml

在src文件夹下创建mybatis-config.xml文件和jdbc.properties文件
jdbc.properties

username=root
password=root
url=jdbc:mysql://localhost:3306/mybatis1103
driver=com.mysql.jdbc.Driver
mybatis-config.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>
<properties resource="jdbc.properties"></properties>
<typeAliases>
<package name="com.cars.mybatis.domain"></package>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<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>
</configuration>
八:创建接口IUserDao,User.xml,和实现类UserDao

IUserDao:

package com.cars.mybatis.dao;

import com.cars.mybatis.domain.User;

public interface IUserDao {
public void add(User user);
public void update(User user);
public void delete(int id);
public User load(int id);
}
User.xml(和User实体在一个包下)

<?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.cars.mybatis.domain.User">
<insert id="add" parameterType="User">
insert into t_user(username,password,nickname,type)
value(#{username},#{password},#{nickname},#{type})
</insert>

<update id="update" parameterType="User">
update t_user set password=#{password},nickname=#{nickname},type=#{type} where id=#{id}
</update>

<delete id="delete" parameterType="int">
delete from t_user where id=#{id}
</delete>

<select id="load" parameterType="int" resultMap="userMap">
select *,t2.id as 'a_id'  from t_user t1 left join t_address t2 on(t1.id = t2.user_id) where t1.id=#{id}
</select>

<resultMap id="userMap" type="User" autoMapping="true">
<id column="user_id" property="id"/>
<collection property="address" ofType="Address">
<id column="a_id" property="id"></id>
<result column="phone" property="phone"></result>
<result column="postcode" property="postcode"></result>
<result column="name" property="name"></result>
</collection>
</resultMap>
</mapper>
UserDao:

package com.cars.mybatis.dao;

import org.apache.ibatis.session.SqlSession;

import com.cars.mybatis.domain.User;
import com.cars.mybatis.util.MyBatisUtil;

public class UserDao implements IUserDao{

@Override
public void add(User user) {
SqlSession session = null;
try{
session = MyBatisUtil.createSession();
session.insert(user.getClass().getName()+".add",user);
session.commit();
}catch(Exception e){
e.printStackTrace();
session.rollback();
}finally{
MyBatisUtil.closeSession(session);
}
}

@Override
public void update(User user) {
SqlSession session = null;
try {
session = MyBatisUtil.createSession();
session.update(user.getClass().getName()+".update",user);
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}finally{
MyBatisUtil.closeSession(session);
}
}

@Override
public void delete(int id) {
SqlSession session = null;
try {
session = MyBatisUtil.createSession();
session.delete(User.class.getName()+".delete",id);
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
}finally{
MyBatisUtil.closeSession(session);
}
}

@Override
public User load(int id) {
SqlSession session = null;
User user = null;
try {
session = MyBatisUtil.createSession();
user = session.selectOne(User.class.getName()+".load",id);
session.commit();
} catch (Exception e) {
e.printStackTrace();
session.rollback();
} finally{
MyBatisUtil.closeSession(session);
}
return user;
}

}


其中MyBatisUtil是在com.cars.mybatis.util包下

package com.cars.mybatis.util;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisUtil {
private static SqlSessionFactory factory;
static{
try{
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
factory = new SqlSessionFactoryBuilder().build(is);
}catch(IOException e){
e.printStackTrace();
}
}

public static SqlSession createSession(){
return factory.openSession();
}
public static void closeSession(SqlSession session){
if(session != null) session.close();
}
}
九:要在mybatis-config.xml文件下加入User.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>
<properties resource="jdbc.properties"></properties>
<typeAliases>
<package name="com.cars.mybatis.domain"></package>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<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>
<mapper resource="com/cars/mybatis/domain/User.xml"/>
</mappers>
</configuration>
十:test是否搭建成功

在test文件夹下创建包:com.cars.mybatis.test,并创建类,如下:

package com.cars.mybatis.test;

import org.junit.Test;

import com.cars.mybatis.dao.IUserDao;
import com.cars.mybatis.dao.UserDao;
import com.cars.mybatis.domain.Address;
import com.cars.mybatis.domain.User;

public class TestUserDao {

private IUserDao ud = new UserDao();
@Test
public void testUserAdd() {
User user = new User();
user.setUsername("ls");
user.setPassword("123");
user.setNickname("李四");
user.setType(1);
ud.add(user);
}
@Test
public void testUserDelele(){
ud.delete(1);
}
@Test
public void testUserLoad(){
User user = ud.load(3);
/*如何实现级联查询*/
for(Address address:user.getAddress()){
System.out.println(address.getName());
}
}
}


测试通过,则说明我们搭建成功了。
这只是一个简单的搭建流程,至于Mybatis的关联关系如何处理,是不是像Hibernate一样方便呢,后面的博客我们再做介绍。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: