1. 程式人生 > >mybatis基礎搭建,完成一對一,一對多的對映配置

mybatis基礎搭建,完成一對一,一對多的對映配置

專案結構截個圖:


1.首先建立一個java專案,新增mybatis的jar包(mybatis-3.4.5.jar)以及連結資料庫的jar包(mysql-connector-java-5.1.44-bin.jar)

2.先建立一個mybatis的配置檔案,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>  
   	<typeAliases>
   		<!-- <typeAlias alias="user" type="com.test.po.User" /> -->
        <!-- 掃描包裡面所有的POJO,推薦此方法,生成的別名是類名 -->
<package name="com.test.po" /> </typeAliases> <!-- 對事務的管理和連線池的配置 --> <environments default="development"> <!-- 可以寫多個環境,切換的時候,替換上面的default --> <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/demo_mybatis1" /> <property name="username" value="root" /> <property name="password" value="" /> </dataSource> </environment> <environment id="development2"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/demo_mybatis1" /> <property name="username" value="root" /> <property name="password" value="" /> </dataSource> </environment> </environments> <!-- mapping 檔案路徑配置 --> <mappers> <!-- <mapper resource="com/test/mapper/UserMapper.xml" />--> <!-- 掃描包裡面所有的配置檔案,推薦此方法 -->
<package name="com.test.mapper" /> </mappers> </configuration>

3.建立SqlSessionFactoryUtil工具類(寫的比較簡單)

package com.test.util;

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 SqlSessionFactoryUtil {

	private static SqlSessionFactory factory=null;
	
	public static void initSqlSessionFactory() {
		try {
			String resource="mybatis-config.xml";
			InputStream is=Resources.getResourceAsStream(resource);
			factory=new SqlSessionFactoryBuilder().build(is);
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public static SqlSession getSqlSession(){
		SqlSession session=null;
		if(factory==null) {
			initSqlSessionFactory();
		}
		session=factory.openSession();
		return session;
	}
}

4.建立User和Address實體類

package com.test.po;

import java.util.List;

public class Address {

	private int id;
	private String sheng;
	private String shi;
	private String qu;
	private List<User> users;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getSheng() {
		return sheng;
	}
	public void setSheng(String sheng) {
		this.sheng = sheng;
	}
	public String getShi() {
		return shi;
	}
	public void setShi(String shi) {
		this.shi = shi;
	}
	public String getQu() {
		return qu;
	}
	public void setQu(String qu) {
		this.qu = qu;
	}
	public List<User> getUsers() {
		return users;
	}
	public void setUsers(List<User> users) {
		this.users = users;
	}
	
}
package com.test.po;

public class User {

	private int id;
	private String name;
	private int age;
	private String sex;
	private Address address;
	
	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;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public Address getAddress() {
		return address;
	}
	public void setAddress(Address address) {
		this.address = address;
	}
	
}

5.建立user和Address的Mapper和對映檔案

UserMapper

package com.test.mapper;

import java.util.List;

import com.test.po.User;

public interface UserMapper {

	public User getUser(Long id);
	
	public Integer addUser(User user);
	
	public Integer deleteUser(Integer id);
	
	public Integer updateUser(User user);
	
	public List<User> getAllUser();
	
	public User getUserWithAddress(long id);
	
	public User getUserByAddressId(Integer addressId);
}

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.test.mapper.UserMapper"> 
	<resultMap type="user" id="userResult">
		<id property="id" column="id" />
		<result property="name" column="name" />
		<result property="age" column="age" />
		<result property="sex" column="sex" />
		<association property="address" column="addressId" select="com.test.mapper.AddressMapper.getAddress" />
	</resultMap> 
    <select id="getUser" parameterType="long" resultType="user">  
        select * from t_user where id=#{id}  
    </select>
    <insert id="addUser" parameterType="User">
    	insert into t_user (name,age,sex) values(#{name},#{age},#{sex})
    </insert>  
    <delete id="deleteUser" parameterType="int">
    	delete from t_user where id=#{id}
    </delete>
    <update id="updateUser" parameterType="user">
    	update t_user set name=#{name},age=#{age} where id = #{id}
    </update>
    <select id="getAllUser" resultMap="userResult">
    	select * from t_user
    </select>
    <select id="getUserWithAddress" resultMap="userResult">
    	select * from t_user where id=#{id}
    </select>
    <select id="getUserByAddressId" resultMap="userResult">
    	select * from t_user where addressId=#{addressId}
    </select>
    
</mapper>  

AddressMapper

package com.test.mapper;

import com.test.po.Address;

public interface AddressMapper {

	public Address getAddress(Long id);
	
}

addressMapper.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.test.mapper.AddressMapper"> 
	<resultMap type="address" id="addressResult">
		<id property="id" column="id" />
		<result property="sheng" column="sheng" />
		<result property="shi" column="shi" />
		<result property="qu" column="qu" />
		<collection property="users" column="id" select="com.test.mapper.UserMapper.getUserByAddressId" />
	</resultMap> 
    <select id="getAddress" parameterType="long" resultMap="addressResult">  
        select * from t_address where id=#{id}  
    </select>
</mapper>  

6.最後是件測試類,測試效果

package com.test.main;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.test.mapper.AddressMapper;
import com.test.mapper.UserMapper;
import com.test.po.Address;
import com.test.po.User;
import com.test.util.SqlSessionFactoryUtil;

public class Test {

	public static void main(String[] args) {
		getAddress(3l);
		//getUserWithAddress(1l);
		//getAllUser();
		//getUserById(1l);
		//updateUser(1l);
		//deleteUser(4);
	}
	
	public static void addUser() {
		SqlSession session=null;
		try {
			session=SqlSessionFactoryUtil.getSqlSession();
			UserMapper userMapper=session.getMapper(UserMapper.class);
			User user=new User();
			user.setAge(20);
			user.setName("aaa");
			user.setSex("男");
			int result=userMapper.addUser(user);
			session.commit();
			if(result>0){
				System.out.println("新增成功!");
			}
		}catch (Exception e) {
			e.printStackTrace();
		}finally {
			session.close();
		}
	}
	
	public static void getUserById(long id) {
		SqlSession session=null;
		try {
			session=SqlSessionFactoryUtil.getSqlSession();
			UserMapper userMapper=session.getMapper(UserMapper.class);
			User user=userMapper.getUser(id);
			session.commit();
			System.out.println(user.getId()+":"+user.getName());
		}catch (Exception e) {
			e.printStackTrace();
		}finally {
			session.close();
		}
	}
	
	public static void deleteUser(int id) {
		SqlSession session=null;
		try {
			session=SqlSessionFactoryUtil.getSqlSession();
			UserMapper userMapper=session.getMapper(UserMapper.class);
			int result=userMapper.deleteUser(id);
			session.commit();
			if(result>0){
				System.out.println("刪除成功!");
			}
		}catch (Exception e) {
			e.printStackTrace();
		}finally {
			session.close();
		}
	}
	
	public static void updateUser(long id) {
		SqlSession session=null;
		try {
			session=SqlSessionFactoryUtil.getSqlSession();
			UserMapper userMapper=session.getMapper(UserMapper.class);
			User user=userMapper.getUser(id);
			user.setName("芳華");
			user.setAge(22);
			int result=userMapper.updateUser(user);
			session.commit();
			if(result>0){
				System.out.println("修改成功!");
			}
		}catch (Exception e) {
			e.printStackTrace();
		}finally {
			session.close();
		}
	}
	
	public static void getAllUser() {
		SqlSession session=null;
		try {
			session=SqlSessionFactoryUtil.getSqlSession();
			UserMapper userMapper=session.getMapper(UserMapper.class);
			List<User> list=userMapper.getAllUser();
			session.commit();
			for(User u:list) {
				System.out.println(u.getId()+":"+u.getName());
			}
		}catch (Exception e) {
			e.printStackTrace();
		}finally {
			session.close();
		}
	}
	
	public static void getUserWithAddress(long id) {
		SqlSession session=null;
		try {
			session=SqlSessionFactoryUtil.getSqlSession();
			UserMapper userMapper=session.getMapper(UserMapper.class);
			User user=userMapper.getUserWithAddress(id);
			session.commit();
			System.out.println(user.getId()+":"+user.getName()+","+user.getAddress().getSheng()+"-"+user.getAddress().getShi()+"-"+user.getAddress().getQu());
		}catch (Exception e) {
			e.printStackTrace();
		}finally {
			session.close();
		}
	}
	
	public static void getAddress(long id) {
		SqlSession session=null;
		try {
			session=SqlSessionFactoryUtil.getSqlSession();
			AddressMapper addressMapper=session.getMapper(AddressMapper.class);
			Address address=addressMapper.getAddress(id);
			session.commit();
			String str="";
			for(User u:address.getUsers()) {
				str+=u.getId()+"-"+u.getName()+";";
			}
			System.out.println(address.getSheng()+address.getShi()+address.getQu()+"的人:"+str);
		}catch (Exception e) {
			e.printStackTrace();
		}finally {
			session.close();
		}
	}
}