1.Mybatis简介
MyBatis是一个数据持久层(ORM)框架。把实体类和SQL语句之间建立了映射关系,是一种半自动化的ORM实现。
MyBatis的优点:
- 基于SQL语法,简单易学。
- 能了解底层组装过程。
- SQL语句封装在配置文件中,便于统一管理与维护,降低了程序的耦合度。
- 程序调试方便。
MyBatis是一个持久层框架,是apache下的顶级项目
MyBatis让程序员将主要精力放在sql上,通过MyBatis 提供的映射方式,自由灵活的生成满足需求的sql语句
MyBatis可以将向preparedstatment中的输入的参数自动的进行输入映射,也能将查询结果集灵活映射成java对象(输出映射)
通过配置文件 来生成sqlsessionfactory ,然后用来生成 sqlsession
sqlsession(会话)(是个接口面向程序员的接口)作用就是向数据库发送sql语句(它是如何发送的?sqlsession里面封装了一个东西,叫做执行器execute)
execute:作用:通过执行器去操作数据库
mapped statment (封装了 sql语句,输入参数,输出参数) (jdbc里面有preparestatment)
输入参数可以是java基本类型,hashmap,自定义的pojo(就是自定义的类型)(自己定义的类)entity(实体类) vo
输出参数可以是java基本类型,hashmap,自定义的pojo(就是自定义的类型)(自己定义的类)
2、Mybatis框架
一个简单的java项目
(1)下载所需要的jar包
(2)创建项目,引入jar包和数据库驱动包,附上项目目录结构
注意:将配置文件mybatis-config.xml,log4j.properties等放到config文件夹下(文件夹:右键->Source folder)
(3) Log4j.properties文件
如果把mybatis目录下的官方log4j.properties直接拿来用,会报错,要删除WARN之后的内容
3、入门程序
(1)、创建好实体类比如Student,要与数据库对应好
(2)、在sqlmap创建一个xml文件,名字随意,一般与类名一致
(3)、在xml中写一个标签
<mapper namespace="需要填写。假设为test">
...
</mapper>
之后,在这个mapper标签里面写sql语句。
举例:
根据学生id查询学生信息
<select id="queryStudentById" parameterType="int" resultType="com.zb.entity.Student">
select * from student where id = #{id}
</select>
解释:
select标签是查询专用标签。同理insert标签,delete标签,update标签分别是插入、删除、更新的专用标签。
id就是给这一部分起个名字,一会儿会用到。
parameterType就是参数类型。这条sql语句里需要一个参数即id(补充:参数的格式是 #{参数名}),id为int型
resultType就是返回值类型,必须是全路径名
根据姓名模糊查询学生信息
<select id="queryStudentByName" parameterType="String" resultType="com.zb.entity.Student">
select * from student where name like #{name}
</select>
插入一条记录(参数类型要写全路径名,也可以简写,后面会讲到)
<insert id="addStudent" parameterType="com.zb.entity.Student">
insert into student(name,age,class_id)
values(#{name},#{age},#{class_id})
</insert>
写完sql语句之后,需要在mybatis-config.xml中加载这个student.xml
代码如下:
<mappers>
<mapper resource="sqlmap/student.xml" />
</mapper>
在主类里测试
//mybatis 全局配置文件位置
String resource = "mybatis-config.xml";
//放在外面是mybatis的核心包
//将我们的配置文件读到流里
InputStream iStream = Resources.getResourceAsStream(resource);
//build 的参数是个 流
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(iStream);
//开启session,有了session就可以操作数据了
SqlSession session = sessionFactory.openSession();
//selectOne的意思就是结果是一条记录,第一个参数为namespace+id名,这里的namespace就是在student.xml中的test,第二个参数为sql语句需要的参数
Student student=session.selectOne("test.queryStudentById",1);
System.out.println(student);
//模糊查询,可能会查处多条记录,所以要用selectList
List<Student>list = session.selectList("test.queryStudentByName", "%张%");
System.out.println(list);
Student student2 = new Student();
student2.setName("123");
student2.setAge(18);
student2.setClass_id(2);
int count = session.insert("test.addStudent", student2);
System.out.println(count);
session.commit();//提交事务要不然数据库里没东西
session.close();//释放资源
插入、删除、更新等对数据库有改变的操作必须要有提交事务和释放资源。但是数据库中事务只要已完成就不能回滚了!木已成舟!
总结:
mybatis在主类里的使用过程是:
(1)通过配置文件创建SqlSessionFactory
(2)通过SqlsessionFactory来创建sessoin
(3)通过session来操作数据库