1.1 发展、作用以及配置****
1.1.1 发展****
以前叫ibatis属于apache
2010年 ibatis-> google colde ,Mybatis 由谷歌接管
1.1.2 作用****
MyBatis可以简化JDBC操作,实现数据的持久化 。
思想:ORM:Object Relational Mapping****
person对象 操作 person表
ORM:概念 ,
Mybatis是ORM的一个实现/Hibernate
orm可以是的开发人员 像操作对象一样 操作数据库表。
1.1.3 配置****
1.导入mybatis的jar包和jdbc的jar包****
****
2. 配置conf.xml:配置头信息、数据库信息 和 需要加载的映射文件****
头信息****
数据库信息****
<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/mybatis" /> <property name= "username" value= "root" /> <property name= "password" value= "123" />
需要加载的映射文件****
<mapper resource= "org/lanqiao/entity/personMapper.xml" />
****
3.建表和对应的类****
4.给每个实体类添加映射文件xxMapper.xml :增删改查标签**** 映射文件一般和类名在同一个包里 映射文件头信息**** **** **** 操作信息**** <mapper namespace= "org.lanqiao.entity.personMapper" > <select id= "queryPersonById" resultType= "org.lanqiao.entity.Person" parameterType= "int" > select * from person where id = #{id}
1.2 操作步骤和配置文件****
1.2.1 基本查询操作****
1.加载配置文件****
//加载MyBatis配置文件(为了访问数据库)
Reader reader = Resources.getResourceAsReader("conf.xml") ;
2.根据reader得到SqlSessionFactory对象****
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader) ;
//session - connection
3.开启方法sessionFactory.openSession()返回SqlSession对象
SqlSession session = sessionFactory.openSession() ;
4.根据映射文件的(全类名.将要操作的id名)****
String statement = "org.lanqiao.entity.personMapper.queryPersonById" ;
5.接收参数selectOne的方法是返回一个值参数为(映射文件和id名,占位符的值)****
Person person = session.selectOne( statement,2 ) ;
System.out.println(person);
6.关闭连接****
session.close();
1.2.2 配置文件config.xml****
1.运行环境****
<environments default= "development" >
<environment id= "development" >****
2.事务提交方式****
<transactionManager type= "JDBC" />****
3.数据源类型****
<dataSource type= "POOLED" >****
4.数据库信息****
<property name= "driver" value= "com.mysql.jdbc.Driver" />
<property name= "url" value= "jdbc:mysql://localhost:3306/mybatis" />
<property name= "username" value= "root" />
<property name= "password" value= "123" />****
1.3 实现基本的crud(增删改查)****
配置好config.xml配置文件后,只需要修改mapper.xml配置文件****
mybatis约定:****
输入参数parameterType 和 输出参数resultType ,在形式上都只能有一个如果输入参数 :是简单类型(8个基本类型+String) 是可以使用任何占位符,#{xxxx},如果是对象类型,则必须是对象的属性 #{属性名}****
输出参数: 如果返回值类型是一个 对象(如Student),则无论返回一个、还是多个,****
****再resultType都写成org.lanqiao.entity.Student
****即 resultType="org.lanqiao.entity.Student"
注意事项:****
如果使用的 事务方式为 jdbc,则需要 手工commit提交,即session.commit();****
1.3.1 增加****
1. 映射文件内容****
<insert id= "addStudent" parameterType= "org.lanqiao.entity.Student" >
insert into student(stuno,stuname,stuage,graname) values(#{stuNo},#{stuName},#{stuAge},#{graName} )
//返回int类型不用写返回值
注:values中的属性值要和表中的字段值相对应,和实体的属性值相对应****
2. 前边的操作都一样****
//conf.xml - > reader
Reader reader = Resources.getResourceAsReader("conf.xml") ;
//reader ->SqlSession
//可以通过build的第二参数 指定数据库环境
SqlSessionFactory sessionFacotry = new SqlSessionFactoryBuilder().build(reader,"development") ;
SqlSession session = sessionFacotry.openSession() ;****
3. 根据类名+id名找到映射文件中的标签方法****
String statement = "org.lanqiao.entity.studentMapper."+"addStudent";
Student student = new Student(3,"ww",25,"s1");****
4. 接收返回值(int)
int count = session.insert(statement, student );//statement:指定执行的SQL student:sql中需要的参数 ( ? ? ? )****
5. 提交事务****
session.commit(); //提交事务
System.out.println("增加"+count+"个学生");
6. 关闭连接****
session.close();****
1.3.2 删除****
1. 映射文件内容****
<delete id= "deleteStudentByStuno" parameterType= "int" >
delete from student where stuno = #{stuno}
//传入int类型(根据id删掉数据)
2. 同上(只是session的方法不同)****
String statement = "org.lanqiao.entity.studentMapper."+"deleteStudentByStuno"; int count = session.delete(statement,3) ; session.commit(); //提交事务****
1.3.3 修改****
1. 映射文件内容****
<update id= "updateStudentByStuno" parameterType= "org.lanqiao.entity.Student" > update student set stuname=#{stuName} ,stuage=#{stuAge},graname=#{graName} where stuno=#{stuNo} ****
- session.update()方法****
3. 实现****
String statement = "org.lanqiao.entity.studentMapper."+"updateStudentByStuno"; //修改的参数 Student student = new Student(); //修改哪个人,where stuno =2 student.setStuNo(2); //修改成什么样子? student.setStuName("lxs"); student.setStuAge(44); student.setGraName("s2"); //执行 int count = session.update(statement,student) ; session.commit(); //提交事务 System.out.println("修改"+count+"个学生"); session.close();****
1.3.4 查询****
1.映射文件内容(返回值是一个类而不是list)****
<select id= "queryAllStudents" resultType= "org.lanqiao.entity.Student" > select * from student ****
2.方法和语句****
Stringstatement = "org.lanqiao.entity.studentMapper."+"queryAllStudents"; List students = session.selectList(statement) ;****
1.4 mybatis的约定以及基于动态代理的CRUD****
1.4.1基础方式的增删改查CRUD****
1. mybatis约定:****
输入参数parameterType 和 输出参数resultType ,在形式上都只能有一个
如果输入参数 :是简单类型(8个基本类型+String) 是可以使用任何占位符,#{xxxx}
如果是对象类型,则必须是对象的属性 #{属性名}
输出参数: 如果返回值类型是一个 对象(如Student),则无论返回一个、还是多个,
再resultType都写成org.lanqiao.entity.Student
即 resultType="org.lanqiao.entity.Student"
2. 注意事项:****
a如果使用的 事务方式为 jdbc,则需要 手工commit提交,即session.commit();
b所有的标签 等 ,都必须有sql语句,但是sql参数值可选 select* from student where stuno = #{xx} sql有参数:session.insert(statement, 参数值 ); sql没参数:session.insert(statement);