Mybatis搭建过程详解

学习完了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一样方便呢,后面的博客我们再做介绍。











  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值