通过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();
    }
}

 

posted @ 2017-09-20 10:04  西瓜的小弟西西瓜  阅读(231)  评论(0编辑  收藏  举报