第一个入门的mybatis例子
实现步骤:
1.新建数据库连接ssm,在里面创建了数据库ssm_mybatis,在里面创建student表
2.加入maven的mybatis坐标,mysql驱动的坐标
3.创建实体类,Student–保存表中的一行数据
4.创建持久层dao接口,定义操作数据库的方法
5.创建一个mybatis使用的配置文件
叫做sql映射文件:写sql语句的,一般一个表一个sql映射文件,这个文件是xml文件。
1.xml文件写在接口所在的目录中
2.文件名称和接口保持一致
6.创建mybatis的主配置文件:
一个项目就一个主配置文件。
主配置文件提供了数据库的连接信息和sql映射文件的位置信息
7.创建mybatis类,通过mybatis访问数据库
第二个例子:
1.新设置了模板,在file–>settings–>Editor–>file and code templates下设置两个新模板
mybatis-mapper(sql映射文件) 和 mybatis-config(mybatis配置文件)
2.接近真实项目,创建了接口和实体类,StudentDao dao = new StudentDaoImpl();
调用dao来使用方法
带三个例子(更接近实际开发):
1.移除了studentDao接口,更接近真实开发,mybatis根据你的dao接口,创建出一个dao接口的实现类,并创建这个类的对象。完成SqlSession调用方法, 访问数据库。
在StudentDao.xml中,
我认为:StudentDao像是配置的类,id="selectStudents,id="insertStudent像是类中的方法,
做好这个配置就可以了(之前我们就是这样写的,所以不用配置,只要删掉接口就可以了)
最后按TestMyBatis中的步骤去执行操作数据库:
@Test
public void testSelectStudents(){
/**
* 使用mybatis的动态代理机制, 使用SqlSession.getMapper(dao接口)
* getMapper能获取dao接口对于的实现类对象。
*/
SqlSession sqlSession = MyBatisUtils.getSqlSession();
StudentDao dao = sqlSession.getMapper(StudentDao.class);
//调用dao的方法, 执行数据库的操作
List<Student> students = dao.selectStudents();
for(Student stu: students){
System.out.println("学生="+stu);
}
}
第四个例子:传参的学习
通过StudentDao、StudentDao.xml、TestMyBatis进行传参的学习,#和$的区别。
1.一个简单类型的参数(必会)
2.多个参数: 命名参数,在形参定义的前面加入 @Param(“自定义参数名称”)(必会)
3.多个参数,使用java对象作为接口中方法的参数(必会)
4.多个参数-简单类型的,按位置传值(不推荐)
5.多个参数,使用Map存放多个值(不推荐)
StudentDao.xml中,where后面的值,就是我们需要传递的参数(暂时的个人理解)
简单举例:
StudentDao: ist<Student> selectMultiParam(@Param("myname") String name, @Param("myage") Integer age);
TestMyBatis: List<Student> students = dao.selectMultiParam("李四",20);
StudentDao.xml: select id,name, email,age from student where name=#{myname} or age=#{myage}
第五个例子:
学习resultType的三种返回值类型:简单类型,对象类型,Map类型 学习resultMap(结果映射,指定列名和Java对象属性关系),学习两种模糊查询
1.给StudentDao.xml中的resultType定义别名:在mybatis.xml中使用定义别名(不建议用别名,还是用权限定名称比较好,更安全)
2.简单类型:例子返回int,resultType="java.lang.Integer,看StudentDao.xml
3.对象类型(推荐使用):例子ViewStudent,查student表里面的内容,返回为ViewStudent,赋值原理是赋值给同名的set方法,看StudentDao.xml
4.Map类型(不推荐,推荐返回对象,最方便):例子返回Map,resultType="java.util.HashMap,看StudentDao.xml
5.本来都是赋给同名属性值,使用resultMap可以将例如id的值赋给age,name等,或者当列名和属性名不一样时,必须使用
6.实际开发中,resultMap使用也是很多的,因为经常有列名和属性名不一样的时候
7.resultMap和resultType不要一起用,二选一,我感觉使用resultType的别名方式,也就是第二种方式特别好用(第80行),这谁还用resultMap啊,但老师推荐第一种…
8.模糊查询:第一种 like , java代码指定 like的内容
第二种方式:在mapper文件中拼接 like的内容
第六个例子:
学习动态SQL:if、where、foreach
1.if:使用参数java对象的属性值作为判断条件,语法 属性=XXX值,需要加上1=1等一定成立的存在,避免后面的语法拼接错误
2.where: …,不需要加上一定成立的1=1了,因为 用来包含 多个的
当多个if有一个成立的, 会自动增加一个where关键字,并去掉 if中多余的 and ,or等。所以我们应该用where和if联合使用。
3.foreach:循环java中的数组,list集合的(例1为里面是基本类型,例2为对象)。 主要用在sql的in语句中。我们不用在自己遍历了,foreach帮我们做到了
4.mybatis.xml中的配置的额外讲解
5.使用xxxx.properties配置文件:
1):在mybatis.xml中设置配置文件的路径
最后:使用PageHelper插件做数据分页
1.在pom.xml中加入PageHelper插件的依赖
2.在主配置文件mybatis.xml中,环境(environments)的前面加配置的插件
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor" />
</plugins>
3.在dao包下的StudentDao类下写方法:List selectAll();
4.在StudentDao.xml(sql映射文件)下写具体的sql语句
4.在test中写测试方法并使用PageHelper插件
StudentDao里的方法,Student.xml里面的实现,TestMyBatis里面的测试,就是当前例子学习的内容
后期我会把代码上传到gitee,得等一会。