mybatis

一、 入门开发步骤

1.导入相关jar包

mybatis3.4.2核心开发包

asm-5.1.jar
cglib-3.2.4.jar
commons-logging-1.1.3.jar
log4j-1.2.17.jar
mybatis-3.4.2.jar

mysql驱动包

mysql-connector-java-5.1.7-bin.jar

2.定义实体及实体映射文件

定义member实体

  1. package com.eggtwo.entity;
  2.  
  3. import java.math.BigDecimal;
  4. import java.util.Date;
  5.  
  6. public class Member {
  7. private int id;
  8.  
  9. public int getId() {
  10. return id;
  11. }
  12.  
  13. public void setId(int id) {
  14. this.id = id;
  15. }
  16.  
  17. private String name;
  18. private int age;
  19. private Date birthday;
  20. private boolean man;
  21. private BigDecimal score;
  22.  
  23. public BigDecimal getScore() {
  24. return score;
  25. }
  26.  
  27. public void setScore(BigDecimal score) {
  28. this.score = score;
  29. }
  30.  
  31. public String getName() {
  32. return name;
  33. }
  34.  
  35. public void setName(String name) {
  36. this.name = name;
  37. }
  38.  
  39. public int getAge() {
  40. return age;
  41. }
  42.  
  43. public void setAge(int age) {
  44. this.age = age;
  45. }
  46.  
  47. public Date getBirthday() {
  48. return birthday;
  49. }
  50.  
  51. public void setBirthday(Date birthday) {
  52. this.birthday = birthday;
  53. }
  54.  
  55. public boolean isMan() {
  56. return man;
  57. }
  58.  
  59. public void setMan(boolean man) {
  60. this.man = man;
  61. }
  62. }

定义MemberMapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <!--映射文件命名空间:要唯一-->
  6. <mapper namespace="memberDao">
  7. <!--
  8. *******当实体属性和表字段名称一致的话resultMap标签可以省略********
  9. resultMap标签:映射实体和表关系
  10. id:映射关系id,要唯一
  11. type:实体全路径
  12. -->
  13. <resultMap id="memberMap" type="com.eggtwo.entity.Member">
  14. <!--id:映射主键属性
  15. result:映射非主键属性
  16. property:实体属性名称
  17. column:表字段名称
  18. -->
  19. <id property="id" column="id"/>
  20. <result property="name" column="name"/>
  21. <result property="age" column="age"/>
  22. <result property="birthday" column="birthday"/>
  23. <result property="man" column="man"/>
  24. <result property="score" column="score"/>
  25. </resultMap>
  26.  
  27. <insert id="add" parameterType="com.eggtwo.entity.Member" useGeneratedKeys="true" keyProperty="id">
  28. insert into t_member(name,age,birthday,man,score)
  29. values(#{name},#{age},#{birthday},#{man},#{score})
  30. </insert>
  31.  
  32. <update id="update" parameterType="com.eggtwo.entity.Member">
  33. update t_member set
  34. name = #{name},
  35. age = #{age},
  36. birthday = #{birthday},
  37. man = #{man},
  38. score = #{score}
  39. where id = #{id}
  40. </update>
  41.  
  42. <delete id="delete" parameterType="int">
  43. delete from t_member where id = #{id}
  44. </delete>
  45.  
  46. <!-- <select id="getById" parameterType="int" resultType="com.eggtwo.entity.Member">-->
  47. <!--resultType使用mybatis.xml中设置的别名,这样可以简化难度-->
  48. <select id="getById" parameterType="int" resultType="memberEntity">
  49. select id,name,age,birthday,man,score
  50. from t_member
  51. where id=#{id}
  52. </select>
  53. <!--
  54. 理论上resultType的值应该是:List<com.eggtwo.entity.Member>
  55. 实际上只需要写List集合中的类型就可以
  56. -->
  57. <select id="getAll" resultType="com.eggtwo.entity.Member">
  58. select *
  59. from t_member
  60. </select>
  61. <!--分页:多参数的写法-->
  62. <select id="getPageList" parameterType="map" resultType="com.eggtwo.entity.Member">
  63. select id,name,age,birthday,man,score
  64. from t_member limit #{start},#{size}
  65. </select>
  66. </mapper>

3.定义mybatis.cfg.xml文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  4. <configuration>
  5. <!-- 加载类路径下的属性文件 -->
  6. <!--加载数据库连接配置信息-->
  7. <properties resource="jdbc.properties"/>
  8. <!-- 设置类型别名 -->
  9. <typeAliases>
  10. <!--设置实体类Member的别名:memberEntity-->
  11. <typeAlias type="com.eggtwo.entity.Member" alias="memberEntity"/>
  12. </typeAliases>
  13.  
  14. <!-- 设置一个默认的连接环境信息 -->
  15. <environments default="mysql_developer">
  16.  
  17. <!-- 连接环境信息,取一个任意唯一的名字 -->
  18. <environment id="mysql_developer">
  19. <!-- mybatis使用jdbc事务管理方式 -->
  20. <transactionManager type="jdbc"/>
  21. <!-- mybatis使用连接池方式来获取连接 -->
  22. <dataSource type="pooled">
  23. <!--配置与数据库交互的4个必要属性 -->
  24. <!-- 直接配置方式,不推荐-->
  25. <!--<property name="driver" value="com.mysql.jdbc.Driver"/>-->
  26. <!-- <property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>-->
  27. <!--<property name="username" value="root"/>-->
  28. <!-- <property name="password" value="123456"/>-->
  29.  
  30. <!--直接在jdbc.properties文件中配置连接-->
  31. <property name="driver" value="${mysql.driver}"/>
  32. <property name="url" value="${mysql.url}"/>
  33. <property name="username" value="${mysql.username}"/>
  34. <property name="password" value="${mysql.password}"/>
  35.  
  36. </dataSource>
  37. </environment>
  38.  
  39. </environments>
  40.  
  41. <!-- 加载映射文件-->
  42. <mappers>
  43. <mapper resource="com/eggtwo/entity/MemberMapper.xml"/>
  44. </mappers>
  45. </configuration>

mybatis.cfg.xml加载的jdbc.properties文件

  1. mysql.driver=com.mysql.jdbc.Driver
  2. mysql.url=jdbc:mysql://127.0.0.1:3306/test
  3. mysql.username=root
  4. mysql.password=123456

4.定义mybatis帮助类:MybatisUtil

  1. package com.eggtwo.dao;
  2.  
  3. import org.apache.ibatis.io.Resources;
  4. import org.apache.ibatis.session.SqlSession;
  5. import org.apache.ibatis.session.SqlSessionFactory;
  6. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  7.  
  8. import java.io.IOException;
  9. import java.io.Reader;
  10. import java.sql.Connection;
  11.  
  12. public class MybatisUtil {
  13.  
  14. private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
  15. private static SqlSessionFactory sqlSessionFactory;
  16. /**
  17. * 加载位于src/mybatis.xml配置文件
  18. */
  19. static{
  20. try {
  21. Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml");
  22. sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
  23. } catch (IOException e) {
  24. e.printStackTrace();
  25. throw new RuntimeException(e);
  26. }
  27. }
  28. /**
  29. * 禁止外界通过new方法创建
  30. */
  31. private MybatisUtil(){}
  32. /**
  33. * 获取SqlSession
  34. */
  35. public static SqlSession getSqlSession(){
  36. //从当前线程中获取SqlSession对象
  37. SqlSession sqlSession = threadLocal.get();
  38. //如果SqlSession对象为空
  39. if(sqlSession == null){
  40. //在SqlSessionFactory非空的情况下,获取SqlSession对象
  41. sqlSession = sqlSessionFactory.openSession();
  42. //将SqlSession对象与当前线程绑定在一起
  43. threadLocal.set(sqlSession);
  44. }
  45. //返回SqlSession对象
  46. return sqlSession;
  47. }
  48. /**
  49. * 关闭SqlSession与当前线程分开
  50. */
  51. public static void closeSqlSession(){
  52. //从当前线程中获取SqlSession对象
  53. SqlSession sqlSession = threadLocal.get();
  54. //如果SqlSession对象非空
  55. if(sqlSession != null){
  56. //关闭SqlSession对象
  57. sqlSession.close();
  58. //分开当前线程与SqlSession对象的关系,目的是让GC尽早回收
  59. threadLocal.remove();
  60. }
  61. }
  62.  
  63. }

5.定义MemberDao测试mybatis增删查改

 

6.测试

  1.  
  1. public static void main(String[] args) throws Exception {
  2. Connection conn = MybatisUtil.getSqlSession().getConnection();
  3. System.out.println(conn != null ? "连接成功" : "连接失败");
  4. MemberDao memberDao = new MemberDao();
  5. Member member = new Member();
  6. member.setId(2);
  7. member.setAge(14);
  8. member.setName("张三1");
  9. member.setBirthday(new Date());
  10. member.setMan(true);
  11. member.setScore(new BigDecimal(123.24));
  12. memberDao.add(member);
  13. // memberDao.update(member);
  14. // memberDao.delete(3);
  15. Member member1 = memberDao.getById(2);
  16. System.out.println(member1.getName());
  17. List<Member> memberList = memberDao.getPageList(2,2);
  18. System.out.println("size:"+memberList.size());
  19. for (Member m : memberList){
  20. System.out.println(m.getId());
  21. }
  22. }
  1.  

二、 动态SQL

1.多条件查询

mapper.xml配置

  1. <select id="getListByWhere" parameterType="map" resultType="com.eggtwo.entity.Member">
  2. select id,name,age,birthday,man,score
  3. from t_member
  4. <where>
  5. <if test="name!=null and name!=''">
  6. and name like #{name}
  7. </if>
  8. <if test="score!=null">
  9. and score > #{score}
  10. </if>
  11. </where>
  12. </select>

dao调用

  1. public List<Member> getListByWhere(String name,BigDecimal score) throws Exception {
  2. SqlSession sqlSession = null;
  3. try {
  4. sqlSession = MybatisUtil.getSqlSession();
  5. Map<String,Object> map=new LinkedHashMap<>();
  6. map.put("name",name==null?null: "%"+name+"%");//做like查询
  7. map.put("score",score);
  8. List<Member> memberList= sqlSession.selectList("memberDao.getListByWhere",map);
  9. return memberList;
  10.  
  11. } catch (Exception e) {
  12. e.printStackTrace();
  13.  
  14. } finally {
  15. //关闭连接
  16. MybatisUtil.closeSqlSession();
  17. }
  18. return null;
  19. }

测试:

  1. List<Member> memberList = memberDao.getListByWhere("3",new BigDecimal(30));

2.部分更新字段

mapper.xml配置

  1. <update id="dynamicUpdate" parameterType="map">
  2. update t_member
  3. <set>
  4. <if test="name!=null">
  5. name = #{name},
  6. </if>
  7. <if test="age!=null">
  8. age = #{age},
  9. </if>
  10. <if test="birthday!=null">
  11. birthday = #{birthday},
  12. </if>
  13. <if test="man!=null">
  14. man = #{man},
  15. </if>
  16. <if test="score!=null">
  17. score = #{score},
  18. </if>
  19. </set>
  20. where id=#{id}
  21. </update>

dao调用:

  1. public void dynamicUpdate(int id, String name,Integer age,Date birthday,Boolean man,BigDecimal score) throws Exception {
  2. SqlSession sqlSession = null;
  3. try {
  4. sqlSession = MybatisUtil.getSqlSession();
  5. Map<String,Object> map=new LinkedHashMap<>();
  6. map.put("id",id);
  7. map.put("name",name);
  8. map.put("age",age);
  9. map.put("birthday",birthday);
  10. map.put("man",man);
  11. map.put("score",score);
  12. sqlSession.update("memberDao.dynamicUpdate", map);
  13. //提交事务
  14. sqlSession.commit();
  15.  
  16. } catch (Exception e) {
  17. e.printStackTrace();
  18. //事务回滚
  19. sqlSession.rollback();
  20. } finally {
  21. //关闭连接
  22. MybatisUtil.closeSqlSession();
  23. }
  24. }

测试:

  1. memberDao.dynamicUpdate(2,"jack",null,null,false,null);

3.根据id集合或数组不确定删除:delete from table where id in(id1,id2,id3,……)

mapper.xml配置

  1. <!--根据ids数组批量删除数据-->
  2. <delete id="batchDelete" >
  3. delete from t_member where id in
  4. <!--
  5. 循环数组
  6. 解析成:(1,2,34)
  7. #id表示数组中的每一个元素,名称可以任意写
  8. -->
  9. <foreach collection="array" open="(" close=")" separator="," item="id">
  10. #{id}
  11. </foreach>
  12. </delete>
  13. <!--根据ids列表批量删除数据-->
  14. <delete id="batchDeleteList" >
  15. delete from t_member where id in
  16. <!--
  17. 循环数组
  18. 解析成:(1,2,34)
  19. #id表示数组中的每一个元素,名称可以任意写
  20. -->
  21. <foreach collection="list" open="(" close=")" separator="," item="id">
  22. #{id}
  23. </foreach>
  24. </delete>

dao调用:

  1. public void batchDelete(int[] ids) throws Exception {
  2. SqlSession sqlSession = null;
  3. try {
  4. sqlSession = MybatisUtil.getSqlSession();
  5. sqlSession.update("memberDao.batchDelete", ids);
  6. sqlSession.commit();
  7. } catch (Exception e) {
  8. e.printStackTrace();
  9. //事务回滚
  10. sqlSession.rollback();
  11. } finally {
  12. //关闭连接
  13. MybatisUtil.closeSqlSession();
  14. }
  15. }
  16. public void batchDeleteList(List<Integer> ids) throws Exception {
  17. SqlSession sqlSession = null;
  18. try {
  19. sqlSession = MybatisUtil.getSqlSession();
  20. sqlSession.update("memberDao.batchDeleteList", ids);
  21. sqlSession.commit();
  22. } catch (Exception e) {
  23. e.printStackTrace();
  24. //事务回滚
  25. sqlSession.rollback();
  26. } finally {
  27. //关闭连接
  28. MybatisUtil.closeSqlSession();
  29. }
  30. }

测试:

  1. memberDao.batchDelete(new int[]{1,4,5});
  2. List<Integer> list=new ArrayList<>() ;
  3. list.add(1);
  4. list.add(17);
  5. list.add(18);
  6. memberDao.batchDeleteList(list);

4.动态插入部分字段

这个不常用

三、 多表查询

1.一对一映射

班级包t_grade和学生表t_student表

获取学生信息时同时把学生对应的班级信息获取出来

第一步:创建实体

Grade实体

  1. package com.eggtwo.entity;
  2.  
  3. import java.util.List;
  4.  
  5. public class Grade {
  6. private Integer id;
  7. private String gradeName;
  8.  
  9. public Integer getId() {
  10. return id;
  11. }
  12.  
  13. public void setId(Integer id) {
  14. this.id = id;
  15. }
  16.  
  17. public String getGradeName() {
  18. return gradeName;
  19. }
  20.  
  21. public void setGradeName(String gradeName) {
  22. this.gradeName = gradeName;
  23. }
  24.  
  25. }

Grade

Student实体

  1. package com.eggtwo.entity;
  2.  
  3. import java.util.Date;
  4.  
  5. public class Student {
  6. private Integer id;
  7. private String name;
  8. private Integer age;
  9. private Date birthday;
  10. private Boolean man;
  11. private Grade grade;
  12.  
  13. public Integer getId() {
  14. return id;
  15. }
  16.  
  17. public void setId(Integer id) {
  18. this.id = id;
  19. }
  20.  
  21. public String getName() {
  22. return name;
  23. }
  24.  
  25. public void setName(String name) {
  26. this.name = name;
  27. }
  28.  
  29. public Integer getAge() {
  30. return age;
  31. }
  32.  
  33. public void setAge(Integer age) {
  34. this.age = age;
  35. }
  36.  
  37. public Date getBirthday() {
  38. return birthday;
  39. }
  40.  
  41. public void setBirthday(Date birthday) {
  42. this.birthday = birthday;
  43. }
  44.  
  45. public Boolean getMan() {
  46. return man;
  47. }
  48.  
  49. public void setMan(Boolean man) {
  50. this.man = man;
  51. }
  52.  
  53. public Grade getGrade() {
  54. return grade;
  55. }
  56.  
  57. public void setGrade(Grade grade) {
  58. this.grade = grade;
  59. }
  60. }

com.eggtwo.entity.Student

第二步:建立mapper.xml

GradeMapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <!--映射文件命名空间:要唯一-->
  6. <mapper namespace="gradeDao">
  7. <!--
  8. *******当实体属性和表字段名称一致的话resultMap标签可以省略********
  9. resultMap标签:映射实体和表关系
  10. id:映射关系id,要唯一
  11. type:实体全路径
  12. -->
  13. <resultMap id="gradeMap" type="com.eggtwo.entity.Grade">
  14. <!--id:映射主键属性
  15. result:映射非主键属性
  16. property:实体属性名称
  17. column:表字段名称
  18. -->
  19. <id property="id" column="id"/>
  20. <result property="gradeName" column="gradeName"/>
  21. </resultMap>
  22. </mapper>

StudentMapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <!--映射文件命名空间:要唯一-->
  6. <mapper namespace="studentDao">
  7. <resultMap id="studentMap" type="com.eggtwo.entity.Student">
  8. <id property="id" column="id"/>
  9. <result property="name" column="name"/>
  10. <result property="age" column="age"/>
  11. <result property="birthday" column="birthday"/>
  12. <result property="man" column="man"/>
  13. <!--引用GradeMapper.xml中的resultMap,不需要再写一遍映射-->
  14. <association property="grade" resultMap="gradeDao.gradeMap"/>
  15. </resultMap>
  16.  
  17. <!--返回值类型用resultMap代替resultType,可以解决实体字段类型和表字段类型不一致的问题-->
  18. <select id="getById" parameterType="int" resultMap="studentMap">
  19. select s.id,s.name,s.age,s.birthday,s.man,g.id,g.gradeName
  20. from t_student s, t_grade g
  21. where s.gradeId=g.id
  22. and s.id=#{id}
  23. </select>
  24.  
  25. </mapper>

第三步:将mapper.xml加入到mybatis.cfg.xml文件中

  1. <mappers>
  2. <mapper resource="com/eggtwo/entity/StudentMapper.xml"/>
  3. <mapper resource="com/eggtwo/entity/GradeMapper.xml"/>
  4. </mappers>

第四步:编写StudentDao

  1. package com.eggtwo.dao;
  2.  
  3. import com.eggtwo.entity.Member;
  4. import com.eggtwo.entity.Student;
  5. import org.apache.ibatis.session.SqlSession;
  6.  
  7. import java.math.BigDecimal;
  8. import java.sql.Connection;
  9. import java.util.*;
  10.  
  11. public class StudentDao {
  12. public Student getById(int id) throws Exception {
  13. SqlSession sqlSession = null;
  14. Student student = null;
  15. try {
  16. sqlSession = MybatisUtil.getSqlSession();
  17. student = sqlSession.selectOne("studentDao.getById", id);
  18.  
  19. } catch (Exception e) {
  20. e.printStackTrace();
  21.  
  22. } finally {
  23. //关闭连接
  24. MybatisUtil.closeSqlSession();
  25. }
  26. return student;
  27. }
  28.  
  29. }

第五步:测试

  1. public static void main(String[] args) throws Exception {
  2.  
  3. StudentDao studentDao = new StudentDao();
  4. Student s = studentDao.getById(2);
  5. System.out.println(s.getName());
  6. }

2.一对多映射

根据班级名称获取学生列表信息

第一步:创建实体

Grade实体

  1. package com.eggtwo.entity;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. public class Grade {
  7. private Integer id;
  8. private String gradeName;
  9. private List<Student> studentList = new ArrayList<Student>();
  10.  
  11. public Integer getId() {
  12. return id;
  13. }
  14.  
  15. public void setId(Integer id) {
  16. this.id = id;
  17. }
  18.  
  19. public String getGradeName() {
  20. return gradeName;
  21. }
  22.  
  23. public void setGradeName(String gradeName) {
  24. this.gradeName = gradeName;
  25. }
  26.  
  27. public List<Student> getStudentList() {
  28. return studentList;
  29. }
  30.  
  31. public void setStudentList(List<Student> studentList) {
  32. this.studentList = studentList;
  33. }
  34. }

Student实体

  1. package com.eggtwo.entity;
  2.  
  3. import java.util.Date;
  4.  
  5. public class Student {
  6. private Integer id;
  7. private String name;
  8. private Integer age;
  9. private Date birthday;
  10. private Boolean man;
  11. private Grade grade;
  12.  
  13. public Integer getId() {
  14. return id;
  15. }
  16.  
  17. public void setId(Integer id) {
  18. this.id = id;
  19. }
  20.  
  21. public String getName() {
  22. return name;
  23. }
  24.  
  25. public void setName(String name) {
  26. this.name = name;
  27. }
  28.  
  29. public Integer getAge() {
  30. return age;
  31. }
  32.  
  33. public void setAge(Integer age) {
  34. this.age = age;
  35. }
  36.  
  37. public Date getBirthday() {
  38. return birthday;
  39. }
  40.  
  41. public void setBirthday(Date birthday) {
  42. this.birthday = birthday;
  43. }
  44.  
  45. public Boolean getMan() {
  46. return man;
  47. }
  48.  
  49. public void setMan(Boolean man) {
  50. this.man = man;
  51. }
  52.  
  53. public Grade getGrade() {
  54. return grade;
  55. }
  56.  
  57. public void setGrade(Grade grade) {
  58. this.grade = grade;
  59. }
  60. }

第二步:建立mapper.xml

GradeMapper.xml和StudentMapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <!--映射文件命名空间:要唯一-->
  6. <mapper namespace="gradeDao">
  7. <!--
  8. *******当实体属性和表字段名称一致的话resultMap标签可以省略********
  9. resultMap标签:映射实体和表关系
  10. id:映射关系id,要唯一
  11. type:实体全路径
  12. -->
  13. <resultMap id="gradeMap" type="com.eggtwo.entity.Grade">
  14. <!--id:映射主键属性
  15. result:映射非主键属性
  16. property:实体属性名称
  17. column:表字段名称
  18. -->
  19. <id property="id" column="id"/>
  20. <result property="gradeName" column="gradeName"/>
  21. </resultMap>
  22. </mapper>
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <!--映射文件命名空间:要唯一-->
  6. <mapper namespace="studentDao">
  7. <resultMap id="studentMap" type="com.eggtwo.entity.Student">
  8. <id property="id" column="id"/>
  9. <result property="name" column="name"/>
  10. <result property="age" column="age"/>
  11. <result property="birthday" column="birthday"/>
  12. <result property="man" column="man"/>
  13. </resultMap>
  14.  
  15. <select id="getListByGradeName" parameterType="string" resultMap="studentMap">
  16. select s.id,s.name,s.age,s.birthday,s.man
  17. from t_student s, t_grade g
  18. where s.gradeId=g.id
  19. and g.gradeName=#{gradeName}
  20. </select>
  21. </mapper>

第三步:将mapper.xml加入到mybatis.cfg.xml文件中

省略

第四步:编写StudentDao

  1. public List<Student> getListByGradeName(String gradeName) throws Exception {
  2. SqlSession sqlSession = null;
  3. List<Student> studentList = null;
  4. try {
  5. sqlSession = MybatisUtil.getSqlSession();
  6. studentList = sqlSession.selectList("studentDao.getListByGradeName",gradeName);
  7.  
  8. } catch (Exception e) {
  9. e.printStackTrace();
  10.  
  11. } finally {
  12. //关闭连接
  13. MybatisUtil.closeSqlSession();
  14. }
  15. return studentList;
  16. }

第五步:测试

  1. List<Student> studentList = studentDao.getListByGradeName("一班");

3.自定义实体对象(不和数据库表对应)用于接收多表查询出来的复合数据

第一步:定义实体GradeStudent

  1. package com.eggtwo.entity;
  2.  
  3. import java.util.Date;
  4.  
  5. public class GradeStudent {
  6. private Integer gradeId;
  7. private String gradeName;
  8.  
  9. private Integer studentId;
  10. private String studentName;
  11. private Integer studentAge;
  12. private Date studentBirthday;
  13.  
  14. public Integer getGradeId() {
  15. return gradeId;
  16. }
  17.  
  18. public void setGradeId(Integer gradeId) {
  19. this.gradeId = gradeId;
  20. }
  21.  
  22. public String getGradeName() {
  23. return gradeName;
  24. }
  25.  
  26. public void setGradeName(String gradeName) {
  27. this.gradeName = gradeName;
  28. }
  29.  
  30. public Integer getStudentId() {
  31. return studentId;
  32. }
  33.  
  34. public void setStudentId(Integer studentId) {
  35. this.studentId = studentId;
  36. }
  37.  
  38. public String getStudentName() {
  39. return studentName;
  40. }
  41.  
  42. public void setStudentName(String studentName) {
  43. this.studentName = studentName;
  44. }
  45.  
  46. public Integer getStudentAge() {
  47. return studentAge;
  48. }
  49.  
  50. public void setStudentAge(Integer studentAge) {
  51. this.studentAge = studentAge;
  52. }
  53.  
  54. public Date getStudentBirthday() {
  55. return studentBirthday;
  56. }
  57.  
  58. public void setStudentBirthday(Date studentBirthday) {
  59. this.studentBirthday = studentBirthday;
  60. }
  61.  
  62. public Boolean getStudentMan() {
  63. return studentMan;
  64. }
  65.  
  66. public void setStudentMan(Boolean studentMan) {
  67. this.studentMan = studentMan;
  68. }
  69.  
  70. private Boolean studentMan;
  71. }

第二步:定义GradeStudentMapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <!--映射文件命名空间:要唯一-->
  6. <mapper namespace="gradeStudentDao">
  7. <resultMap id="gradeStudentMap" type="com.eggtwo.entity.GradeStudent">
  8.  
  9. <result property="studentId" column="studentId"/>
  10. <result property="studentName" column="studentName"/>
  11. <result property="studentAge" column="studentAge"/>
  12. <result property="studentBirthday" column="studentBirthday"/>
  13. <result property="studentMan" column="studentMan"/>
  14. <result property="gradeId" column="gradeId"/>
  15. <result property="gradeName" column="gradeName"/>
  16. </resultMap>
  17.  
  18. <!--返回值类型用resultMap代替resultType,可以解决实体字段类型和表字段类型不一致的问题-->
  19. <select id="getGradeStudentList" resultMap="gradeStudentMap">
  20. select s.id as studentId,
  21. s.name as studentName,
  22. s.age as studentAge,
  23. s.birthday as studentBirthday,
  24. s.man as studentMan,
  25. g.id as gradeId,
  26. g.gradeName
  27. from t_student s, t_grade g
  28. where s.gradeId=g.id
  29. </select>
  30.  
  31. </mapper>

第三步:将GradeStudentMapper.xml加入mybatis.xml

  1. <mappers>
  2. <mapper resource="com/eggtwo/entity/MemberMapper.xml"/>
  3. <mapper resource="com/eggtwo/entity/StudentMapper.xml"/>
  4. <mapper resource="com/eggtwo/entity/GradeMapper.xml"/>
  5. <mapper resource="com/eggtwo/entity/GradeStudentMapper.xml"/>
  6. </mappers>

第四步:编写dao

  1. public List<GradeStudent> getGradeStudentList() throws Exception {
  2. SqlSession sqlSession = null;
  3. List<GradeStudent> gradeStudentList = null;
  4. try {
  5. sqlSession = MybatisUtil.getSqlSession();
  6. gradeStudentList = sqlSession.selectList("gradeStudentDao.getGradeStudentList");
  7.  
  8. } catch (Exception e) {
  9. e.printStackTrace();
  10.  
  11. } finally {
  12. //关闭连接
  13. MybatisUtil.closeSqlSession();
  14. }
  15. return gradeStudentList;
  16. }

java web开发入门七(mybatis)基于intellig idea的更多相关文章

  1. day04 Java Web 开发入门

    day04 Java Web 开发入门 1. web 开发相关介绍 2. web 服务器 3. Tomcat服务器启动的问题 4. Tomcat目录结构 5. Web应用程序(虚拟目录映射,缺省web ...

  2. java WEB开发入门

    WEB开发入门 1 进入web JAVASE:标准- standard   JAVA桌面程序 GUI    SOCKET JAVAEE:企业-浏览器控制  web 2 软件结构 C/S :client ...

  3. java web 开发入门实例

    学习是个技巧活,关键是要找到重点的地方,新手在这方面的坑尤其多.看别人的教程一步一步的跟着做,隔几步就遇到一个新知识点,忍不住就百度往深处了解,一晃半天就过去了. 有的知识点要深入学习的,有的是了解下 ...

  4. java web 开发入门 --- tomcat/servlet/jsp

    在做java web 开发时,要先安装tomcat.它是一个web服务器,也叫web容器,我们把写好的jsp, html页面放到它里面,然后启动它,就可以用浏览器访问这些页面,地址栏中输入localh ...

  5. java web 开发入门

    Java web,是java技术用来解决web互联网领域的技术总和.Java web技术主要包括客户端和服务端,java在客户端的服务有java applet,不过用的非常少,大部分应用在服务端,比如 ...

  6. java web开发入门一(servlet和jsp)基于eclispe

    servlet 用java语言开发动态资源网站的技术,在doGet方法中拼接显示html,在doPost方法中提交数据.类似于.net的ashx技术. servlet生成的class文件存放在tomc ...

  7. java web开发入门汇总

    servlet 用java语言开发动态资源网站的技术,在doGet方法中拼接显示html,在doPost方法中提交数据.类似于.net的ashx技术. servlet生成的class文件存放在tomc ...

  8. Java开发工程师(Web方向) - 01.Java Web开发入门 - 第3章.Tomcat

    第3章--Tomcat Tomcat安装与运行 Tomcat:目前最常用的基于java的web应用服务器 本课程中所有的Java代码最终都需要部署到Tomcat中运行 Tomcat的配置文件是XML的 ...

  9. Java开发工程师(Web方向) - 01.Java Web开发入门 - 第6章.蜂巢

    第6章--蜂巢 蜂巢简介 网站开发完,就需要测试.部署.在服务器上运行. 网易蜂巢: 采用Docker容器化技术的云计算平台 https://c.163.com 容器管理:容器可被视作为云主机的服务器 ...

随机推荐

  1. Clickhouse单机部署以及从mysql增量同步数据

    背景: 随着数据量的上升,OLAP一直是被讨论的话题,虽然druid,kylin能够解决OLAP问题,但是druid,kylin也是需要和hadoop全家桶一起用的,异常的笨重,再说我也搞不定,那只能 ...

  2. C++回调,函数指针

    想要理解回调机制,先要理解函数指针 函数指针 函数指针指向的是函数而非对象,和其他指针一样,函数指针指向某种特定的类型 函数的类型由他的返回类型和参数类型共同决定,与函数名无关,如: bool len ...

  3. 禁止直接通过IP访问--->nginx

    在nginx.conf 中添加 server{ listen 80 default_server; return 501; } 注: nginx加载include是按顺序,如果是文件夹,就是文件顺序, ...

  4. Server2016 IIS安装配置

  5. Java生鲜电商平台-供应链模块的设计与架构

    Java生鲜电商平台-供应链模块的设计与架构 说明:Java开源生鲜电商平台中供应链模块属于卖家的行为,也就是卖家如何管理他们自己的供应商,包括结算方式,压款方式,结算周期等等,超出了我这个B2B平台 ...

  6. 元素增删事件DOMNodeInserted和DOMNodeRemoved

    监听元素变化的三种方法: 对于表单类型的控件,使用onchange事件最好. 使用DOMNodeInserted和DOMNodeRemoved事件 使用定时器定时检测(下策) 有时需要给一个class ...

  7. java.lang.NoSuchMethodError的通用解决思路

    NoSuchMethodError中文意思是没有找到方法,遇到这个错误并不是说依赖的jar包.方法不存在而找不到,这就类似于 ClassNotFoundException错误了,出现ClassNotF ...

  8. 章节十四、5- web页面的截图

    一.以雅虎网站为例,当我们在登录时,输入错误的用户名然后点击“下一步”,用户名输入框会提示红色字体,这个时候我们就将页面进行截图. http://commons.apache.org/proper/c ...

  9. JavaScript函数式编程究竟是什么?

    摘要: 理解函数式编程. 作者:前端小智 原文:JS中函数式编程基本原理简介 Fundebug经授权转载,版权归原作者所有. 在长时间学习和使用面向对象编程之后,咱们退一步来考虑系统复杂性. 在做了一 ...

  10. 处理 JS中 undefined 的 7 个技巧

    摘要: JS的大部分报错都是undefined... 作者:前端小智 原文:处理 JS中 undefined 的 7 个技巧 Fundebug经授权转载,版权归原作者所有. 大约8年前,当原作者开始学 ...