[简单的一对多查询]Mybatis实现对数据库的一对多查询

坚持写博客的第二天,学习过程很美好,虽然有时候感觉内容很差,但还是想尝试坚持一个好习惯,就算结果差强人意,最起码曾经努力过,不怕万人阻挡,就怕自己投降.加油!


1.一对多查询:

         就是通过"1"的一方去查询多的一方,例如大小分类,老师对学生,可以通过某一个大分类的一方查询出该类下所有的小分类;

2.配置Mybatis连接数据库:

configuration>
<!--数据库连接-->
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC"/>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
			</dataSource>
		</environment>
	</environments>
<!--   扫描mapper.xml文件 -->
	<mappers>
        <mapper resource="com/xh/mapper/TeaMapper.xml"></mapper>
    </mappers>
</configuration>

3.添加学生类和老师类:

 在这里说一下,要去做多对一,一对多,多对多,一对一,都要去创建表关系.

学生id是主键,老师id是外键

下面是在mysql中怎么添加主键的代码:

主键约束
添加:ALTER TABLE  table_name ADD PRIMARY KEY (字段)
删除:ALTER TABLE table_name DROP PRIMARY KEY

//学生类
public class StuBean {
    private int id;//学生学号
    private String name;//学生姓名
    private int tid;//老师的外键id
---------------------------------------
//老师类
public class Teacher {
    private int tid;//老师id
    private String tname;//老师姓名
    private List<StuBean> stus;//老师对多个学生的列表

4.编写Dao层接口:


public interface TeaDao {
    //一老师对多学生的查询方法
    public List<Teacher> getTeaAll();
}

5.编写工厂类,获取数据库连接:

//工厂类
public class SF {
    private static SqlSessionFactory sf;
    static {
        try {
            //解析配置文件
            Reader reader= Resources.getResourceAsReader("mybatis.xml");
            //创建SqlsessionFactory
            sf=new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //提供一个对外连接数据库的方法
    public static SqlSession getSession(){
        return sf.openSession();
    }
}

6.编写Dao层实现类:


public class TeaDaoImpl implements TeaDao {
    //默认连接关闭
    SqlSession session=null;
    @Override
    public List<Teacher> getTeaAll() {
        try {
            //获取连接
            session= SF.getSession();
            //执行mapper对数据库的操作
            List<Teacher> list=session.selectList("getTeaAll");
            //查到并返回数据
            return list;
        }catch (Exception e){
            if (session!=null){
                //出错回滚
                session.rollback();
            }
            //出错返回null
            return null;
        }finally {
            if (session!=null){
                //关闭连接
                session.close();
            }
        }
    }
}

7.编写mapper.xml文件,对数据库做查询:

<mapper namespace="com.xh.dao.TeaDao">

<!--    resultMap:id是自定义名,type:表示返回什么类型的数据-->
    <resultMap id="teas" type="com.xh.bean.Teacher">
<!--        下面的id表示你数据库中的id,而且是主键-->
        <id column="tid" property="tid"></id>
        <result column="tname" property="tname"></result>
        <collection property="stus" ofType="com.xh.bean.StuBean">
            <id column="id" property="id"></id>
            <result column="name" property="name"></result>
            <result column="tid" property="tid"></result>
        </collection>
    </resultMap>
<!--resultmap:要和上面你定义的id值一样-->
	<select id="getTeaAll" resultMap="teas">
        select * from student s,teacher t where s.tid=t.tid
    </select>

</mapper>

8.到此查询完毕,接下来是测试类代码:

public class TeaTest {
    public static void main(String[] args) {
        TeaDao td=new TeaDaoImpl();
        System.out.println(td.getTeaAll());
    }
}

9.查询出来的内容:

 

10:mapper层简短讲解:

<resultMap>标签在mapper.xml中,由程序员控制SQL查询结果与实体类的映射关系
    Mybatis默认使用的是AutoMapping特性
使用<resultMap>标签时,<select>标签就不写resultType属性,而是用resultMap属性引用<resultMap>标签

感谢各位耐心观看,哪里写的不对或者有更好的建议欢迎留言吐槽,我一定认真以待,有想要源码可以留言给我.

那我们明天见!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道而起

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值