3.关联查询和属性文件

1.创建javaweb项目MyBatis_Part3并在项目的WebRoot下的WEB-INF下的lib中加入如下jar文件

mybatis-3.2.3.jar

ojdbc14.jar

2.在src下创建configuarion.xml主配置文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" >
 3 <configuration>
 4
 5   <!-- 1.引用jdbc链接数据库的属性文件 -->
 6   <properties resource="jdbc.properties"/>
 7
 8   <!-- 2.类路径的别名 -->
 9   <typeAliases>
10     <typeAlias type="com.entity.Classes" alias="Classes"/>
11     <typeAlias type="com.entity.Teacher" alias="Teacher"/>
12     <typeAlias type="com.entity.Student" alias="Student"/>
13   </typeAliases>
14
15   <!-- 3.事务和数据源的配置 -->
16   <environments default="development">
17     <environment id="development">
18       <transactionManager type="jdbc"/>
19       <dataSource type="POOLED">
20         <property name="driver" value="${driver}"/>
21         <property name="url" value="${url}"/>
22         <property name="username" value="${username}"/>
23         <property name="password" value="${password}"/>
24       </dataSource>
25     </environment>
26   </environments>
27   <!-- 4.注册映射文件 -->
28   <mappers>
29   <!-- 有映射文件时resource属性=映射文件的路径 -->
30   <!-- 使用注解没有映射文件时class属性=映射文件的路径 -->
31   <mapper url="com."/>
32
33   </mappers>
34
35 </configuration>

configuration.xml

3.在src下创建jdbc.properties属性文件

1 driver=oracle.jdbc.driver.OracleDriver
2 url=jdbc\:oracle\:thin\:@127.0.0.1\:1521\:orcl
3 username=holly
4 password=sys

jdbc.properties

4.在src下创建mybatis_Part3.txt说明文件

 1 1.mybaits主配置文件
 2 (1)环境根节点s
 3 (2)环境根节点
 4 (3)jdbc管理事务
 5 (4)dataSource数据源
 6 《1》driver,url,username,password
 7 (5)注册映射文件
 8
 9 2.mybaits的映射文件
10 (1)查询
11 <select id="和映射接口方法名" parameterType="" resultType="">
12
13 (2)插入
14 <insert id="" paramenterType="">
15
16 (3)修改
17 <update id="" paramenterType="">
18
19
20 (3)删除
21 <delete id="" paramenterType="">
22
23
24 3.步骤
25 (1)在myeclipce 里倒入mybatis的dtd文件
26 (2)创建项目
27 (3)在项目的src下创建主配置文件
28 (4)在com.mapper包下创建映射文件
29 (5)编辑主配置文件
30 (6)编辑映射接口
31 (7)编辑映射文件
32 (8)编辑接口实现类
33 无代理
34 selectList 查所有
35 selectOne  查单条
36 insert
37 update
38 delete
39
40 有代理
41 利用反射获取接口对象,然后调用接口方法
42
43
44 4.一对多,一对一,链接数据库的属性文件,resultMap的配置
45 --老师表
46 CREATE TABLE teacher(
47      tid number PRIMARY KEY,
48      tname VARCHAR2(20)
49  );
50 --班级表
51  CREATE TABLE classes(
52 cid number PRIMARY KEY,
53 cname VARCHAR2(20),
54 teacherid number,
55 constraint fk_class_teacherid foreign key(teacherid)
56 references teacher(tid));
57
58 --学生表
59 CREATE TABLE student(
60 sid number PRIMARY KEY,
61 sname VARCHAR2(20),
62 classid number,
63 constraint fk_student_classid foreign key(classid)
64 references classes(cid));
65
66 --创建序列
67  create sequence seq_teacher;
68
69  create sequence seq_classes;
70
71  create sequence seq_student;
72
73 --添加数据
74 INSERT INTO teacher VALUES(seq_teacher.nextval, ‘holly‘);
75 INSERT INTO teacher VALUES(seq_teacher.nextval, ‘石头‘);
76
77 INSERT INTO class VALUES(seq_classes.nextval,‘TB13‘, 1);
78 INSERT INTO class VALUES(seq_classes.nextval,‘TB24‘, 2);
79
80 INSERT INTO student VALUES(seq_student.nextval,‘陈阳‘,1);
81 INSERT INTO student VALUES(seq_student.nextval,‘王佳俊‘,1);
82 INSERT INTO student VALUES(seq_student.nextval,‘黄逸舟‘,1);
83 INSERT INTO student VALUES(seq_student.nextval,‘张浩‘,2);
84 INSERT INTO student VALUES(seq_student.nextval,‘张冉‘,2);
85 INSERT INTO student VALUES(seq_student.nextval,‘孙秋云‘,2);
86
87 --修改表名
88 alter table class rename to classes;

Mybatis_Part3.txt

5.在src下com.entity包下创建Student.java文件

 1 package com.entity;
 2
 3 public class Student {
 4     private int sid;
 5     private String sname;
 6
 7     public Student() {
 8     }
 9
10     public Student(int sid, String sname) {
11         this.sid = sid;
12         this.sname = sname;
13     }
14     public int getSid() {
15         return sid;
16     }
17     public void setSid(int sid) {
18         this.sid = sid;
19     }
20     public String getSname() {
21         return sname;
22     }
23     public void setSname(String sname) {
24         this.sname = sname;
25     }
26
27     @Override
28     public String toString() {
29         return "Student [sid=" + sid + ", sname=" + sname + "]";
30     }
31
32
33
34
35 }

Student.java

6.在src下com.entity包下创建Teacher.java文件

 1 package com.entity;
 2
 3 public class Teacher {
 4     private int tid;
 5     private String tname;
 6
 7     public Teacher() {
 8     }
 9     public Teacher(int tid, String tname) {
10         this.tid = tid;
11         this.tname = tname;
12     }
13     public int getTid() {
14         return tid;
15     }
16     public void setTid(int tid) {
17         this.tid = tid;
18     }
19     public String getTname() {
20         return tname;
21     }
22     public void setTname(String tname) {
23         this.tname = tname;
24     }
25     @Override
26     public String toString() {
27         return "Teacher [tid=" + tid + ", tname=" + tname + "]";
28     }
29
30
31
32 }

Teacher.java

7.在src下com.entity包下创建Classes.java文件

 1 package com.entity;
 2
 3 import java.util.List;
 4
 5 public class Classes {
 6     private int cid;
 7     private String cname;
 8     private Teacher teacher; //一对一
 9     private List<Student> students; //一对多
10
11     public Classes() {
12     }
13     public Classes(int cid, String cname, Teacher teacher) {
14         this.cid = cid;
15         this.cname = cname;
16         this.teacher = teacher;
17     }
18
19     public Classes(int cid, String cname, Teacher teacher,
20             List<Student> students) {
21         super();
22         this.cid = cid;
23         this.cname = cname;
24         this.teacher = teacher;
25         this.students = students;
26     }
27     public List<Student> getStudents() {
28         return students;
29     }
30     public void setStudents(List<Student> students) {
31         this.students = students;
32     }
33     public int getCid() {
34         return cid;
35     }
36     public void setCid(int cid) {
37         this.cid = cid;
38     }
39     public String getCname() {
40         return cname;
41     }
42     public void setCname(String cname) {
43         this.cname = cname;
44     }
45     public Teacher getTeacher() {
46         return teacher;
47     }
48     public void setTeacher(Teacher teacher) {
49         this.teacher = teacher;
50     }
51     @Override
52     public String toString() {
53         return "Classes [cid=" + cid + ", cname=" + cname + ", students="
54                 + students + ", teacher=" + teacher + "]";
55     }
56
57
58 }

Classes.java

8.在src下com.util包下创建MyBaitsUtil.java文件

 1 package com.util;
 2
 3 import java.io.IOException;
 4 import java.io.Reader;
 5
 6 import org.apache.ibatis.io.Resources;
 7 import org.apache.ibatis.session.SqlSession;
 8 import org.apache.ibatis.session.SqlSessionFactory;
 9 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
10
11 public class MyBaitsUtil {
12     private static SqlSessionFactory sqlSessionFactory;
13
14     static{
15         try {
16             Reader reader=Resources.getResourceAsReader("configuration.xml");
17             sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
18         } catch (IOException e) {
19             e.printStackTrace();
20         }
21
22     }
23     /**
24      *
25      * @param isCommit true表示执行完操作提交事务,false表示执行完不自动提交事务
26      * @return
27      */
28     public static SqlSession getSqlSession(boolean isCommit){
29         return sqlSessionFactory.openSession(isCommit);
30     }
31
32 }

MyBaitsUtil.java

9.在src下com.mapper包下创建StudentMapper.java文件

 1 package com.mapper;
 2
 3 import java.util.List;
 4
 5 import com.entity.Student;
 6
 7 public interface StudentMapper {
 8     List<Student> findAll();
 9
10 }

StudentMapper.java

10.在src下com.mapper包下创建StudentMapper.xml文件

1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
3 <mapper namespace="com.mapper.StudentMapper">
4   <select id="findAll" resultType="Student">
5      select * from student
6   </select>
7 </mapper>

StudentMapper.xml

11.在src下com.mapper包下创建TeacherMapper.java文件

 1 package com.mapper;
 2
 3 import java.util.List;
 4
 5 import com.entity.Teacher;
 6
 7 public interface TeacherMapper {
 8     List<Teacher> findAll();
 9
10 }

TeacherMapper.java

12.在src下com.mapper包下创建TeacherMapper.xml文件

1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
3 <mapper namespace="com.mapper.TeacherMapper">
4   <select id="findAll" resultType="Teacher">
5     select * from teacher
6   </select>
7 </mapper>

TeacherMapper.xml

13.在src下com.mapper包下创建ClassesMapper.java文件

 1 package com.mapper;
 2
 3 import java.util.List;
 4
 5 import com.entity.Classes;
 6
 7 public interface ClassesMapper {
 8      List<Classes> findAll();
 9
10 }

ClassesMapper.java

14.在src下com.mapper包下创建ClassesMapper.xml文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 3 <mapper namespace="com.mapper.ClassesMapper">
 4   <!-- 1.三表联查的sql,返回的map -->
 5   <select id="findAll" resultMap="ClassResultMap">
 6    select * from student s,teacher t,classes c
 7      where c.teacherid=t.tid and s.classid=c.cid
 8   </select>
 9
10   <!-- 2.配置三表联查返回的map -->
11   <!-- id的值等于select节点的resultMap的值,type表示集合类型 -->
12   <resultMap id="ClassResultMap" type="Classes" >
13      <!-- classes表主键配置 ,实体类里的属性字段和数据库表字段映射-->
14      <id property="cid" column="cid"/>
15
16      <!-- classes普通字段配置 -->
17      <result property="cname" column="cname"/>
18
19      <!-- 一对一:对象的配置 -->
20      <association property="teacher" column="teacherid" javaType="Teacher">
21        <!-- teacher表主键id配置 -->
22        <id property="tid" column="tid"/>
23
24        <!-- teacher表普通字段的配置 -->
25        <result property="tname" column="tname"/>
26      </association>
27
28      <!-- 一对多:list集合的配置,ofType集合中的对象类型 -->
29      <collection property="students" ofType="Student">
30        <!-- student表主键id配置 -->
31        <id property="sid" column="sid"/>
32
33        <!-- student表普通字段的配置 -->
34        <result property="sname" column="sname"/>
35      </collection>
36   </resultMap>
37 </mapper>

ClassesMapper.xml

15.在src下com.mapper.impl包下创建ClassesMapperImpl.java文件

 1 package com.mapper.impl;
 2
 3 import java.util.List;
 4
 5 import org.apache.ibatis.session.SqlSession;
 6
 7 import com.entity.Classes;
 8 import com.mapper.ClassesMapper;
 9 import com.util.MyBaitsUtil;
10
11 public class ClassesMapperImpl implements ClassesMapper {
12     /**
13      * 查询所有
14      */
15     public List<Classes> findAll() {
16         //获取sqlSession
17         SqlSession sqlSession=MyBaitsUtil.getSqlSession(false);
18         //使用有代理,动态创建ClassesMapper对象
19         ClassesMapper mapper=sqlSession.getMapper(ClassesMapper.class);
20         //调用映射接口方法==代理对象调用底层的selectList实现
21         List<Classes> list=mapper.findAll();
22         //关闭session
23         sqlSession.close();
24         //返回结果
25         return list;
26     }
27
28 }

ClassesMapperImpl.java

16.在src下com.test包下创建Test.java文件

package com.test;

import java.util.List;

import com.entity.Classes;
import com.mapper.ClassesMapper;
import com.mapper.impl.ClassesMapperImpl;

public class Test {
    public static void main(String[] args) {
        ClassesMapper mapper=new ClassesMapperImpl();
        List<Classes> list=mapper.findAll();
        if(list!=null){
            for (Classes classes : list) {
                System.out.println(classes);
            }
        }
    }

}

Test.java

时间: 2024-10-10 21:22:29

3.关联查询和属性文件的相关文章

通过Spark SQL关联查询两个HDFS上的文件操作

order_created.txt   订单编号  订单创建时间 10703007267488 2014-05-01 06:01:12.334+01 10101043505096 2014-05-01 07:28:12.342+01 10103043509747 2014-05-01 07:50:12.33+01 10103043501575 2014-05-01 09:27:12.33+01 10104043514061 2014-05-01 09:03:12.324+01 order_pic

mybatis映射文件select_resultMap_关联查询_collection定义关联集合

知识点:查询一个实体类,并查出这个类下面的集合 Employee.java实体类 package com.hand.mybatis.bean;public class Employee {    private Integer eId;    private String eName;    private Integer gender;    private String email;    private Department dept;        public Employee() {

Mybatis学习二(字段名与实体类属性名不相同/关联查询)

1.在写项目的时候会遇到数据库字段名与实体类属性名不同的情况,可能是为了方便也可能是其他要求,whatever,我们现在来解决这个问题 准备一个数据库表如下 1 CREATE TABLE orders( 2 order_id INT PRIMARY KEY AUTO_INCREMENT, 3 order_no VARCHAR(20), 4 order_price FLOAT 5 ); 接下类定义一个实体类 1 public class Order { 2 private int id; 3 pr

关于Entity Framework自动关联查询与自动关联更新导航属性对应的实体注意事项说明

一.首先了解下Entity Framework 自动关联查询: Entity Framework 自动关联查询,有三种方法:Lazy Loading(延迟加载),Eager Loading(预先加载),Explicit Loading(显式加载),其中Lazy Loading和Explicit Loading都是延迟加载. (注:由于Entity Framework版本的不同,以及采用不同的模式(DB First,Model First,Code First)来构建的Entity,最终导致可能自

【三】MyBatis的SQL映射文件 ----- 一对多的关联查询

一对多关联查询的解决方案也有两种:嵌套结果和嵌套查询 在上一篇博客中已经讲了一对一的关联查询,在MySQL数据库中已经存在了班级表 class 和教师表 teacher.为了满足一对多关联查询的要求,还需要创建一张学生表 student.这样,在查询班级信息的同时,可以得到教师和学生的信息. 创建 student 表的 SQL 语句如下: CREATE TABLE student( s_id INT PRIMARY KEY AUTO_INCREMENT, s_name VARCHAR(20),

MyBatis:学习笔记(3)——关联查询

MyBatis:学习笔记(3)--关联查询 关联查询 理解联结 SQL最强大的功能之一在于我们可以在数据查询的执行中可以使用联结,来将多个表中的数据作为整体进行筛选. 模拟一个简单的在线商品购物系统,如果我们将用户信息和订单信息都保存在user表中,这样就不存在联结关系,因为我们仅仅操作一张表就好. 但是这是非常不明智的选择,举例来说,一个用户可以拥有多个订单,如果保存在一个表中,势必会导致用户信息的多次出现,因为每个订单绑定的用户信息都是相同的. 所以我们尽量要将不同的信息存储与不同的表中,但

Mybatis高级查询之关联查询

3 关联查询 做查询之前,先修改几个配置.mapper.xml是在mybatis-config.xml中指定,那么我们每增加一个mapper都要增加一个配置,很麻烦.为了简化配置.需要将mapper接口和mapper.xml放到同一个文件下,并且接口和xml文件命名一致.使用mybatis的自动扫描:.这样,当我们新增接口的时候,直接创建接口和对应xml文件就可以了: <mappers> <!--<mapper resource="com.test.mapper.dao/

Mybatis关联查询(嵌套查询)

上一篇文章介绍了基于Mybatis对数据库的增.删.改.查.这一篇介绍下关联查询(join query). 三张表:user article blog 表的存储sql文件: /* Navicat MySQL Data Transfer Source Server : localhost Source Server Version : 50620 Source Host : localhost:3306 Source Database : mybatis Target Server Type :

yii2中关联查询

yii2 ActiveRecord多表关联以及多表关联搜索的实现 一个老生常谈的问题.最近通过群里的反馈,觉得很多人还是没有去理解这个问题.今天把这个问题讲明白了,看看yii2 ActiveRecord是怎么个多表关联以及如何去优化这个关联. 场景需求: 假设我们有一张用户表user和一张用户渠道表auth,两张数据表通过user.id和auth.uid进行一对一关联.现需要在user列表展示auth表的来源渠道source,且该渠道可搜索. 首先我们先通过gii生成user和auth系列相关的