通过XML+接口进行mybatis简单的配置
1:
主要功能是查询用户,用户和身份信息是一对一关联,用户对订单是一对多关联
主要有用户表、身份信息表以及订单表
源码保存在 D:\海同\mybatis\9.16\work9.19 目录中
相关JAR包
log4j-1.2.16.jar
mybatis-3.1.1.jar
mysql-connector-java-5.1.7-bin.jar
2:源码
相关配置文件
1、log4j配置文件,不要做相关的修改
log4j.properties, log4j.rootLogger=DEBUG, Console #Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n log4j.logger.java.sql.ResultSet=INFO log4j.logger.org.apache=INFO log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG
2、数据库配置文件
jdbc.driverClass=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql:/// jdbc.user= jdbc.password=
3、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> <properties resource="db.properties"/> <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> <typeAliases> <typeAlias type="com.yuwenhui.entity.Order" alias="_Order"/> <typeAlias type="com.yuwenhui.entity.Identity" alias="_Identity"/> <package name="com.yuwenhui.entity"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driverClass}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.user}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/yuwenhui/mapper/userDaoMapper.xml"/> </mappers> </configuration>
接口
public interface UserDao { public User getUserById(Integer userId); public User getUserById2(Integer userId); public User getUserById3(Integer userId); public User getUserById4(Integer userId); }
实现类
//用户实现类 public class User { protected Integer userId; protected String userName; protected Identity identity; protected List<Order> orders; } //身份实现类 public class Identity { private Integer identityId; private Integer number; } //订单实现类 public class Order { private Integer orderId; private String orderName; }
User的子类,第四种通过继承的方法获取数据,中使用的子类
package com.yuwenhui.entity; /** * Created by Administrator on 2017/9/19 0019. */ public class UserPlus extends User{ private Integer identityId; private Integer number; public UserPlus() { super.identity = new Identity(); } public Integer getIdentityId() { return identityId; } //对父类的identity对象进行赋值 public void setIdentityId(Integer identityId) { super.identity.setIdentityId(identityId); } public Integer getNumber() { return number; } //对父类的identity对象进行赋值 public void setNumber(Integer number) { super.identity.setNumber(number); } @Override public String toString() { return "UserPlus{" + "userId=" + userId + ", userName='" + userName + '\'' + ", identity=" + identity + ", orders=" + orders + '}'; } }
UserMapper
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">
<!-- namespace 需要和接口的名字一样-->
<mapper namespace="com.yuwenhui.dao.UserDao">
<!--通过多表联合查询-->
<!--select id 需要和接口的方法一致-->
<select id="getUserById" resultMap="userMapper" >
SELECT
*
FROM
user919 u,order919 o,identity919 i
WHERE
u.user_id = o.user_id AND i.identity_id = u.identity_id AND u.user_id = #{id};
</select>
<resultMap id="userMapper" type="User">
<id property="userId" column="user_id"/>
<result property="userName" column="user_name"/>
<association property="identity" javaType="Identity" >
<id property="identityId" column="identity_id"/>
<result property="number" column="number"/>
</association>
<collection property="orders" ofType="_Order" >
<id property="orderId" column="order_id"/>
<result property="orderName" column="order_name"/>
</collection>
</resultMap>
<!--通过多次发送sql语句-->
<select id="getUserById2" resultMap="userMapper2" >
SELECT * FROM user919 WHERE user_id = #{id};
</select>
<resultMap id="userMapper2" type="User">
<id property="userId" column="user_id"/>
<result property="userName" column="user_name"/>
<association property="identity" javaType="Identity" column="identity_id" select="getIdentity">
</association>
<collection property="orders" ofType="_Order" column="user_id" select="getOrder"></collection>
</resultMap>
<select id="getIdentity" resultType="Identity" parameterType="Integer">
SELECT * FROM identity919 WHERE identity_id = #{id};
</select>
<select id="getOrder" resultType="Order" parameterType="Integer">
SELECT * FROM order919 WHERE user_id = #{id};
</select>
<!-- 通过别名的方式,对对象的属性进行赋值-->
<select id="getUserById3" resultType="User" >
SELECT
u.user_id userId,
u.user_name userName,
i.identity_id "identity.identityId",
i.number "identity.number"
FROM
user919 u,identity919 i
WHERE
u.identity_id = i.identity_id AND u.user_id = #{id};
</select>
<!-- 通过将目标类进行包装,将该包装类的子类进行赋值-->
<select id="getUserById4" resultType="UserPlus">
SELECT
u.user_id userId,
u.user_name userName,
i.identity_id identityId,
i.number number
FROM
user919 u,identity919 i
WHERE
u.identity_id = i.identity_id
AND u.user_id = #{id};
</select>
</mapper>
测试
package com.yuwenhui.test; import com.yuwenhui.dao.UserDao; import com.yuwenhui.entity.User; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.io.Reader; /** * Created by Administrator on 2017/9/19 0019. */ public class Test1 { private SqlSessionFactory sessionFactory; private SqlSession session; @Before public void befor() { String resource = "conf.xml"; Reader reader = null; try { reader = Resources.getResourceAsReader(resource); } catch (IOException e) { e.printStackTrace(); } sessionFactory = new SqlSessionFactoryBuilder().build(reader); session = sessionFactory.openSession(); } @Test public void testFindUser1(){ UserDao mapper = session.getMapper(UserDao.class); User user = mapper.getUserById(1); System.out.println(user); } @Test public void testFindUser2(){ UserDao mapper = session.getMapper(UserDao.class); User user = mapper.getUserById2(1); System.out.println(user); } @Test public void testFindUser3(){ UserDao mapper = session.getMapper(UserDao.class); User user = mapper.getUserById3(1); System.out.println(user); } @Test public void testFindUser4(){ UserDao mapper = session.getMapper(UserDao.class); User user = mapper.getUserById4(1); System.out.println(user); } @After public void after() { session.close(); } }