一·查询(查所有)
1·修改“StudentDao”
添加List<Student> loadStus()
package edu.mju.stuwork.dao;
import java.util.List;
import edu.mju.stuwork.domain.Student;
public interface StudentDao {
void addStu(Student stu);
List<Student> loadStus();//泛型,List里面只能包含学生,不能包含别的东西了
}
2·修改“StudentMapper.xml”
添加“loadAll”的映射
<select id="loadAll" resultType="Student"><!-- 这个方法没有参数,但是有返回值“Student” -->
select *
from tbl_student
order by stu_no desc
</select>
3·修改“StudentDaoMybatisImpl”
添加
@Override
public List<Student> loadStus() {
// TODO Auto-generated method stub
return null;
}
完善其内容
@Override
public List<Student> loadStus() {
// 获得SQLSession
SqlSession session = MybatisUtils.getSession();
List<Student> stuList = session.selectList("edu.mju.stuwork.StudentMapper.loadAll");/* 要用selectList来完成,返回值是一个List */
session.commit();
MybatisUtils.closeSession(session);
return stuList;
}
4·来到测试程序,进行测试
测试程序:
package edu.mju.stuwork.test;
import java.util.List;
import edu.mju.stuwork.dao.StudentDao;
import edu.mju.stuwork.dao.StudentDaoMybatisImpl;
import edu.mju.stuwork.domain.Student;
public class Tester {
public static void main(String[] args) {
StudentDao stuDao = new StudentDaoMybatisImpl();
List<Student> stuList = stuDao.loadStus();
for (Student stu : stuList)
System.out.println(stu);
}
}
有查到19条数据,但是结果都是空。表示没有分装成功。
Tips:驼峰和下划线
学生属性名是驼峰的,数据库的字段名是下划线的
在自动映射的情况下,下划线与驼峰不能匹配。它虽然知道要创建学生对象,但是没办法存进去。
需要添加“设置项”,将下划线映射到驼峰命名。
设置项:
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
将其添加到“mybatis-config.xml”的如下位置:
再测试,可行:
数据库不区分大小写,不能用驼峰。Java用下划线不符合规范,就用这种办法解决。
会将下划线转成驼峰,再存回去。是基于配置的编程。
二·查询(查单个)
1·修改“StudentDao”
添加
Student getStuByNo(int stuNo);//根据学生ID来获得一个学生信息
2·修改“StudentMapper.xml”
添加:
<select id="getStuByNo" parameterType="int" resultType="Student">
select *
from tbl_student
where stu_no=#{stuNo}<!-- 只有一个参数 -->
</select>
只有一个参数,所以就算写成aaa也是没有影响的。
3·修改“StudentDaoMybatisImpl”
添加:
@Override
public Student getStuByNo(int stuNo) {
// 获得SQLSession
SqlSession session = MybatisUtils.getSession();
Student stu =session.selectOne("edu.mju.stuwork.StudentMapper.getStuByNo",stuNo);/* 要用selectList来完成,返回值是一个List,选择单个 */
session.commit();
MybatisUtils.closeSession(session);
return stu;
}
4·测试
来到Tester.java
package edu.mju.stuwork.test;
import java.util.List;
import edu.mju.stuwork.dao.StudentDao;
import edu.mju.stuwork.dao.StudentDaoMybatisImpl;
import edu.mju.stuwork.domain.Student;
public class Tester {
public static void main(String[] args) {
StudentDao stuDao = new StudentDaoMybatisImpl();
Student stu = stuDao.getStuByNo(10);
System.out.println(stu);
}
}
三·修改
1·修改“StudentDao”
添加
void updateStudent(Student stu);
2·修改“StudentMapper.xml”
添加
<update id="updateStu" parameterType="Student">
update tbl_student
set stu_name=#{stuName},stu_mark=#{stuMark}
where stu_no=#{stuNo}
</update>
这里就不止一个参数了,参数名要好好写。
3·修改“StudentDaoMybatisImpl”
添加
@Override
public void updateStudent(Student stu) {
SqlSession session = MybatisUtils.getSession();
session.update("edu.mju.stuwork.StudentMapper.updateStu",stu);
session.commit();
MybatisUtils.closeSession(session);
}
4·测试
package edu.mju.stuwork.test;
import java.util.List;
import edu.mju.stuwork.dao.StudentDao;
import edu.mju.stuwork.dao.StudentDaoMybatisImpl;
import edu.mju.stuwork.domain.Student;
public class Tester {
public static void main(String[] args) {
StudentDao stuDao = new StudentDaoMybatisImpl();
Student stu = stuDao.getStuByNo(10);
System.out.println(stu);
stu.setStuName("mikeha");
stu.setStuMark(100);
stuDao.updateStudent(stu);
stu = stuDao.getStuByNo(10);
System.out.println(stu);
}
}
四·删除
1·修改“StudentDao”
添加
void delStudent(int stuNo);
2·修改“StudentMapper.xml”
<delete id="delStu" parameterType="int">
delete from tbl_student
where stu_no=#{stuNo}
</delete>
3·修改“StudentDaoMybatisImpl”
添加
@Override
public void delStudent(int stuNo) {
SqlSession session = MybatisUtils.getSession();
session.delete("edu.mju.stuwork.StudentMapper.delStu",stuNo);
session.commit();
MybatisUtils.closeSession(session);
}
4·测试
package edu.mju.stuwork.test;
import java.util.List;
import edu.mju.stuwork.dao.StudentDao;
import edu.mju.stuwork.dao.StudentDaoMybatisImpl;
import edu.mju.stuwork.domain.Student;
public class Tester {
public static void main(String[] args) {
StudentDao stuDao = new StudentDaoMybatisImpl();
stuDao.delStudent(10);
}
}
五·将JDBC实现更换为Mybatis实现
1·将“StudentServiceImpl”的JDBC实现更换为Mybatis实现
将这些更换为Mybatis实现
2·测试
删除
Mybatis使用了连接池,速度快不少。
JDBC使我们了解Mybatis在做什么,Mybatis替代了我们以前在JDBC做的部分事情。但是只用到这种程度存在多表查询的结果不能实现自动映射,只能手动书写的问题。