mybatis实现一对多连接查询
底层数据库为postgresql,ORM框架为mybatis。
关键代码如下:
mybatis配置文件如下:
mybatis.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>
- <settings>
- <setting name="cacheEnabled" value="true" />
- <setting name="lazyLoadingEnabled" value="true" />
- <setting name="multipleResultSetsEnabled" value="true" />
- <setting name="useColumnLabel" value="true" />
- <setting name="useGeneratedKeys" value="true" />
- <setting name="defaultExecutorType" value="SIMPLE" />
- <setting name="defaultStatementTimeout" value="25000" />
- </settings>
- <typeAliases>
- <typeAlias type="com.mybatis.domain.User" alias="User" />
- <typeAlias type="com.mybatis.domain.Score" alias="Score" />
- </typeAliases>
- <environments default="development">
- <environment id="development">
- <transactionManager type="JDBC" />
- <dataSource type="POOLED">
- <property name="driver" value="org.postgresql.Driver" />
- <property name="url" value="jdbc:postgresql://localhost:5432/mybatis" />
- <property name="username" value="postgres" />
- <property name="password" value="admin" />
- </dataSource>
- </environment>
- </environments>
- <mappers>
- <mapper resource="com/mybatis/domain/User.xml" />
- <mapper resource="com/mybatis/domain/Score.xml" />
- </mappers>
- </configuration>
User.java代码为:
- package com.mybatis.domain;
- public class User {
- private Integer id;//用户id
- private String username;//用户名
- private String password;//密码
- private String address;//地址
- public User(){
- }
- public User(String username,String password,String address){
- this.username = username;
- this.password = password;
- this.address =address;
- }
- public User(Integer id,String username,String password,String address){
- this.id = id;
- this.username = username;
- this.password = password;
- this.address =address;
- }
- public int getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String getAddress() {
- return address;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- public String toString(){
- return "当前用户为:id = "+id+",username = "+username+",password = "+password+",address = "+address;
- }
- }
Score.java代码如下:
- package com.mybatis.domain;
- public class Score {
- private Integer id ;//主键id
- private User user;//所属用户
- private int math ;//数学成绩
- private int chinese ;//语文成绩
- private int english ;//英语成绩
- private int computer ;//计算机成绩
- public Score(){
- }
- public Score(User user, int math,int chinese,int english,int computer){
- this.user = user;
- this.math = math;
- this.chinese = chinese;
- this.english = english;
- this.computer = computer;
- }
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public User getUser() {
- return user;
- }
- public void setUser(User user) {
- this.user = user;
- }
- public int getMath() {
- return math;
- }
- public void setMath(int math) {
- this.math = math;
- }
- public int getChinese() {
- return chinese;
- }
- public void setChinese(int chinese) {
- this.chinese = chinese;
- }
- public int getEnglish() {
- return english;
- }
- public void setEnglish(int english) {
- this.english = english;
- }
- public int getComputer() {
- return computer;
- }
- public void setComputer(int computer) {
- this.computer = computer;
- }
- public String toString(){
- return "id = "+ this.id+",math = "+this.math+",chinese = "+this.chinese+",english = "+this.english+",computer = "+this.computer+
- ", userid = "+this.user.getId()+",username = "+this.user.getUsername()+",password = "+this.user.getPassword()+
- ",address = "+this.user.getAddress();
- }
- }
user.xml中的关键代码为:
- <resultMap type="User" id="userResult">
- <id property="id" column="userid"/>
- <result property="username" column="username"/>
- <result property="password" column="password"/>
- <result property="address" column="address"/>
- </resultMap>
这里的对象的属性id对应的数据库表列名为userid,这是user对象为pg_score表中
的标示。
score.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="ScoreDaoMapping">
- <resultMap type="Score" id="score">
- <constructor>
- <idArg column="id" javaType="int" />
- <arg column="userid" javaType="int" />
- <arg column="math" javaType="int" />
- <arg column="chinese" javaType="int" />
- <arg column="english" javaType="int" />
- <arg column="computer" javaType="int" />
- </constructor>
- </resultMap>
- <resultMap id="joinSelectScore" type="Score" >
- <id property="id" column="id"/>
- <result property="math" column="math"/>
- <result property="chinese" column="chinese"/>
- <result property="english" column="english"/>
- <result property="computer" column="computer"/>
- <association property="user" column="userid" javaType="User" resultMap="UserDaoMapping.userResult"/>
- </resultMap>
- <insert id="insertScore" parameterType="Score">
- insert into pg_score(math,chinese,english,computer,userid) values(#{math},#{chinese},#{english},#{computer},#{user.id})
- </insert>
- <select id="findScoreByUser" resultMap="joinSelectScore" resultType="list" parameterType="map">
- select
- s.id as id,
- s.math as math,
- s.chinese as chinese,
- s.english as english,
- s.computer as computer,
- u.id as userid,
- u.username as username,
- u.password as password,
- u.address as address
- from pg_score s left outer join pg_userinfo u on s.userid = u.id where u.id=#{userid}
- </select>
- </mapper>
ScoreDao.java中的关键代码为:
- private String resource = "com/mybatis/configuration/mybatis.xml";
- public List<Score> selectScoreByUser(User user) throws IOException{
- Reader reader = Resources.getResourceAsReader(resource);
- SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader);
- SqlSession session = ssf.openSession();
- reader.close();
- Map<String,Integer> params = new HashMap<String,Integer>();
- params.put("userid", user.getId());
- List<Score> scoreList = session.selectList("ScoreDaoMapping.findScoreByUser", params);
- session.commit();
- session.close();
- return scoreList;
- }
ScoreService.java代码如下:
- package com.mybatis.service;
- import java.io.IOException;
- import java.util.List;
- import com.mybatis.dao.ScoreDao;
- import com.mybatis.domain.Score;
- import com.mybatis.domain.User;
- public class ScoreService {
- private ScoreDao scoreDao = new ScoreDao();
- public ScoreDao getScoreDao() {
- return scoreDao;
- }
- public void setScoreDao(ScoreDao scoreDao) {
- this.scoreDao = scoreDao;
- }
- public List<Score> getScoreByUser(User user) throws IOException{
- return scoreDao.selectScoreByUser(user);
- }
- public void insertScore(Score score) throws IOException{
- scoreDao.insert(score);
- }
- }
Test.java代码如下:
- package com.mybatis.test;
- import java.util.List;
- import com.mybatis.domain.Score;
- import com.mybatis.domain.User;
- import com.mybatis.service.ScoreService;
- import com.mybatis.service.UserService;
- public class Test {
- private UserService userService = new UserService();
- private ScoreService scoreSerice = new ScoreService();
- public static void main(String[] args) throws Exception{
- Test test = new Test();
- //test.insertScore();
- List<Score> scoreList = test.getScore();
- Score score = null;
- for(int i=0;i<scoreList.size();i++){
- System.out.println("第"+(i+1)+"个score对象为:");
- score = scoreList.get(i);
- System.out.println(score);
- }
- }
- public void insertScore() throws Exception{
- List<User> userList = userService.getPageUsers(10, 0);
- User user = userList.get(2);
- Score score = new Score();
- score.setUser(user);
- score.setChinese(80);
- score.setComputer(90);
- score.setEnglish(91);
- score.setMath(98);
- scoreSerice.insertScore(score);
- }
- public List<Score> getScore() throws Exception{
- List<User> userList = userService.getPageUsers(10, 0);
- User user = userList.get(0);
- List<Score> scoreList = scoreSerice.getScoreByUser(user);
- return scoreList;
- }
- /* public User getUserById(int id) throws Exception{
- return userService.getUserById(id);
- }*/
- }
mybatis实现一对多连接查询的更多相关文章
- mybatis 13: 一对多关联查询
业务背景 根据客户id查询客户基本信息,以及客户存在的订单信息 两张数据表 客户表 订单表 实体类 客户实体类:Customer private Integer id; private String ...
- MyBatis:一对多关联查询
MyBatis从入门到放弃四:一对多关联查询 前言 上篇学习了一对一关联查询,这篇我们学习一对多关联查询.一对多关联查询关键点则依然是配置resultMap,在resultMap中配置collecti ...
- mybatis collection 一对多关联查询,单边分页的问题总结!
若想直接通过sql实现多级关联查询表结构得有2 个必不可少的字段:id ,parentId,levelId id:主键id, parentId:父id levelId:表示第几级(表本身关联查询的时候 ...
- 使用mybatis进行一对多嵌套查询时出错:输出结果:Country{id=2, name='美国', minister=[null]}
即Minister类作为Country类的关联属性. 查询的输出结果是:Country{id=2, name='美国', minister=[null]} <!--mapper.xml内容--& ...
- mybatis处理一对多的查询
//查询出某个班级对应的所有老师和学生 1.使用嵌套结果 <select id="findClasses3" parameterType="int" re ...
- Mybatis中的多表查询 多对一,一对多
示例:用户和账户 一个用户可以有多个账户 一个账户只能属于一个用户(多个账户也可以属于同一个用户) 步骤: 1.建立两张表:用户表,账户表 让用户表和账户表之间具备一对多的关系:需要使用外键在账户表中 ...
- MyBatis数据持久化(七)多表连接查询
本节继续以多表连接查询的案例介绍使用resultMap的好处,对于两张以上的表进行关联查询,当我们有选择的从不同表查询所需字段时,使用resultMap是相当方便的.例如我们有两张表,分别为用户表Us ...
- 7.mybatis一对多关联查询
和第5节一对一查询类似,但是不同的是,一对一使用的是association,而一对多使用collection. 实例: 1个班级Class,对应1个老师Teacher,对应多个学生Student 1. ...
- MyBatis从入门到放弃四:一对多关联查询
前言 上篇学习了一对一关联查询,这篇我们学习一对多关联查询.一对多关联查询关键点则依然是配置resultMap,在resultMap中配置collection属性,别忽略了ofType属性. 搭建开发 ...
随机推荐
- 【 MAKEFILE 编程基础之二】MAKEFILE 书写规划以及语法规则!
本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/gcc-makefile/768.html ...
- 移动端动态font-size
/** * Created by shimin on 2017/8/18. *///计算dpr!function(win, lib) { var timer, doc = win.document, ...
- 电商系统架构总结3(webapi授权机制)
三 Web API 授权方式 web api的客户端,包括 android,ios,h5,自然对访问权限要加上授权机制.对于h5,要求把h5站点和web api部署在同一个域名下,然后对web api ...
- ZooKeeper的安装和API
Zookeeper的分布式安装和API介绍: 安装教程 在datanode1.datanode2和datanode3三个节点上部署Zookeeper. 步骤 解压zookeeper安装包到/opt/m ...
- centos7 真实机安装后没有网卡解决办法
我们在真实机安装完centos7版本后,会发现没有网卡,只有lo口 因为真实机不同你在虚拟机里面,这个时候我们不能连网,更加不要说配置什么静态ip了 是什么原因呢,是因为有些真实机安装了centos系 ...
- Android转场动画,Avtivity转场动画;
转场动画 - 共享元素动画 先看效果: Activity1点击小图标开启Activity2: 开启Activity2效果就像是小图标放大了填充上去的,关闭Activity2回到Activity1时又像 ...
- MySQL免安装配置(亲测过,请放心借鉴)
下载地址:https://dev.mysql.com/downloads/mysql 1.mysqld --initialize-insecure 初始化 2.mysqld install 安装服 ...
- javascript中的未定义和未声明
我们在项目中,经常会定义一些变量(很多时候,定义过多的全局变量),当我们调用这些变量的时候,就会发生各种各样的突发状况. 看一个示例: var a; typeof a; typeof b; 很简单的一 ...
- couchdb
http://docs.couchdb.org/en/2.0.0/api/database/find.html#find-selectors
- 《算法》第一章部分程序 part 2
▶ 书中第一章部分程序,加上自己补充的代码,包括简单的计时器,链表背包迭代器,表达式计算相关 ● 简单的计时器,分别记录墙上时间和 CPU 时间. package package01; import ...