mybatis08(配置文件实现多对一的查询)

 

注:一个顾客对应多个订单,而一个订单只能对应一个客户,而反过来也就是多对一的形式了,多个订单表可以对应一个顾客,一个顾客是可以拥有多个订单的,本例为多个学生对应一个班级

 

1.class的javabean


 

package com.bean;

public class Classes {



 private Integer id;
 private Integer code;
 public Integer getId() {
  return id;
 }
 public void setId(Integer id) {
  this.id = id;
 }
 public Integer getCode() {
  return code;
 }
 public void setCode(Integer code) {
  this.code = code;
 }
 @Override
 public String toString() {
  return "Classes [id=" + id + ", code=" + code + "]";
 }
 
}

2.student的javabean


 

package com.bean;

public class Student {



 private Integer id;
 private String name;
 private Integer age;
 private String sex;
 private Classes studentClass;
 public Integer getId() {
  return id;
 }
 public void setId(Integer id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public Integer getAge() {
  return age;
 }
 public void setAge(Integer age) {
  this.age = age;
 }
 public String getSex() {
  return sex;
 }
 public void setSex(String sex) {
  this.sex = sex;
 }
 public Classes getStudentClass() {
  return studentClass;
 }
 public void setStudentClass(Classes studentClass) {
  this.studentClass = studentClass;
 }
 @Override
 public String toString() {
  return "Student [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + ", studentClass="
    + studentClass + "]";
 }
}

 

3.log4j.properties

# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.com.mapper=DEBUG
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

 

 

4.jdbc.properties(对一些变量的设置)

 

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mybatis
username=root
password=123456

 

 

5.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">
   
    <!--1.配置环境 ,默认的环境id为mysql-->
 <configuration>
 
  <!-- 导入 jdbc.properties 引用里面的值-->
  <properties resource="jdbc.properties"/>
  
  <!-- 1.指定mybatis所用日志的具体实现 -->
  <settings>
   <setting name="logImpl" value="LOG4j"/>
  </settings>
  <!--2.配置环境 ,默认的环境id为mysql-->
  <environments default="mysql">
   <!--2.2.配置id为mysql的数据库环境 -->
   <environment id="mysql">
    <!-- 2.2.1使用JDBC的事务管理   使用了JDBC的提交和回滚设置-->
    <transactionManager type="JDBC"></transactionManager>
    <!--2.2.2数据库连接池   POOLED是JDBC连接对象的数据源连接池的实现 -->
    <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>
  
  <!--3.配置Mapper的位置 -->
  <mappers>
   <mapper resource="com/mapper/UserMapper.XML"/>
   <!-- 使用本地文件 -->
   <!-- <mapper url="file:///D:/java/workspaces/mybatis0/src/com/mapper/UserMapper.xml"/> -->
  </mappers>
 </configuration>

 

 

6.数据库操作的配置文件

<?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表示命名空间
 程序代码访问文件是通过namespace完成的,包名+文件名命名
-->
<mapper namespace="com.mapper.UserMapper">

 <!-- 1.1   分两次查询 -->
 <resultMap type="com.bean.Student" id="sthdentResultMap">
  <id property="id" column="id"/>
  <result property="name" column="name"/>
  <result property="age" column="age"/>
  <result property="sex" column="sex"/>
  <association property="studentClass" column="class_id" javaType="com.bean.Classes" select="selectClass"/>
 </resultMap>
 <select id="selectStudent" parameterType="String" resultMap="sthdentResultMap">
  select * from student where name=#{name}
 </select>
 <!-- 此时是返回类型 -->
 <select id="selectClass" resultType="com.bean.Classes">
  select * from class where id=#{id}
 </select>
 
 <!-- 2. 多表联合查询 -->
 <resultMap type="com.bean.Student" id="Student">
  <id property="id" column="id"/>
  <result property="name" column="name"/>
  <result property="age" column="age"/>
  <result property="sex" column="sex"/>
  <association property="studentClass" javaType="com.bean.Classes">
   <!-- 此时会将student表的id 传入 class表的id 此时应该在联合查询时对class表的id起别名 -->
   <id property="id" column="bid"/>
   <result property="code" column="code"/>
  </association>
 </resultMap>
 <select id="select" parameterType="String" resultMap="Student">
  SELECT a.id,a.name,a.age,a.sex,b.id as bid,b.code
  from student a,class b
  where a.name='${value}' and a.class_id=b.id
 </select>
</mapper>

 

7.查

package com.Test;

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;
import org.junit.Test;

import com.bean.Student;

public class test {

 @Test
 public void selectById() throws IOException
 {
  InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
  SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 
  SqlSession session = sessionFactory.openSession();
  Student student=session.selectOne("com.mapper.UserMapper.selectStudent","1");
  System.out.println(student);
  /*System.out.println(student.getId()+"\t"+student.getName()+"\t"+student.getAge()+"\t"+student.getSex());
  System.out.println(student.getStudentClass().getId()+"\t"+student.getStudentClass().getCode());*/
 }
 @Test
 public void select() throws IOException
 {
  InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
  SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 
  SqlSession session = sessionFactory.openSession();
  Student student=session.selectOne("com.mapper.UserMapper.select", "1");
  System.out.println(student);
  /*System.out.println(student.getId()+"\t"+student.getName()+"\t"+student.getAge()+"\t"+student.getSex());
  System.out.println(student.getStudentClass().getId()+"\t"+student.getStudentClass().getCode());*/
 }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值