坚持写博客的第二天,学习过程很美好,虽然有时候感觉内容很差,但还是想尝试坚持一个好习惯,就算结果差强人意,最起码曾经努力过,不怕万人阻挡,就怕自己投降.加油!
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>标签
感谢各位耐心观看,哪里写的不对或者有更好的建议欢迎留言吐槽,我一定认真以待,有想要源码可以留言给我.
那我们明天见!