
mybatis的出现原有:
解决使用JDBC的缺点:
1.代码比较多,开发效率低
2.需要关注Conntion。Statement,ResultSet 对象创建和销毁
3.对ResultSet 查询的结果,需要自己封装为List
4.重复的的硬编译比较
5.业务代码和数据库的操作混在一起
mybatis框架
一个框架,早期叫做ibatis,代码在github
mybatis 是MyBatis SQL Mapper Framework for Java (sql映射框架)
1)sql mapper :sql映射 :
可以把数据表中的一行数据 映射为一个对象。
一行数据可以看成是一个Java对象。操作这个对象,就相当于操作表中的数据
2)Data Access Objects (Daos) :数据访问 , 对数据库执行增删改查。
mybatis提供了哪些功能:
1.提供了创建Conntion,Statement,ResultSet的能力,不用开发人员创建这些对象了
2.提供了执行SQL语句的能力, 不用你执行sql
3.提供了循环sql,把sql的结果转为Java对象,List集合的能力
while(rs.next()){
student stu = new student();
stu.setId(rs.getInt("id"));
stu.setName(rs.getString("name"));
stu.setAge(rs.getInt("age"));
//从数据库取出数据转为Student 对象,封装到List集合
stuList.add(stu);
}
4.提供了关闭资源的能力,不用你关闭Conntion,Statement,ResultSet
我们开发人员做的事:提供SQL语句
最后是: 开发人员提供sql语句--mybatis处理sql---开发人员得到List集合或Java对象(表中的数据)
总结:mybatis是一个sql映射框架,提供的数据库的操作能力。增强的JDBC,使用mybatis让开发人员集中精神写sql就可以了,不用重复劳动Conntion,Statement,ResultSet的创建
实现步骤:
1.新建Student表加入数据
2.加入Maven的mybatis坐标,mysql驱动的坐标
3.创建实体类,student--保存表中的一行数据的 //定义属性名要和sql表的字段一致
4.创建持久层的dao接口,定义操作数据库的方法
5.创建一个mybatis使用的配置文件叫做sql映射文件:写sql语句的。一般一个表一个sql映射文件。这个文件是XML文件。
1)在接口所在的目录中
2)文件名称和接口保持一致。
3)把mybatis官网中的入门探究sql的映射拷贝过来,
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
<select id ="selectstudents" resulType="">
select id,name,email,age from student order by id
</select>
<!--
id:你要执行的sql语法的唯一标识,mybatis会使用这个id的值来找到要执行的sql语句
可以自定义,但是要求你使用接口中的方法名称。
resulType:表示结果类型的,是sql语句执行后得到Resulset,遍历这个resultset的到java对象的类型。
""后面的值写的是类型的全限定名称,相当于包名加类名
>
剖析源代码:
mybatis-3-mapper.dtd:是约束文件,作用:限制,检查在当前文件中出现的标签,属性必须符合mybatis的要求
mapper:是当前文件的根标签,必须的
namespace:叫做命名空间,唯一值得,可以是自定义的字符串。要求你使用dao接口的全限定名称。
在当前文件中,可以使用特定的标签,表示数据库的特定操作。
<select>:表示执行查询
<update>:表示更新数据库的操作,就是在<update>标签中写的事update sql语句
<insert>:便是插入,放的是
<delete>:删除
<!--
id:你要执行的sql语法的唯一标识,mybatis会使用这个id的值来找到要执行的sql语句
可以自定义,但是要求你使用接口中的方法名称。
>
6.创建mybaits的主配置文件:
一个项目就一个主配置文件。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
剖析源代码:
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<environments default="development">
environments:一个数据库信息的配置,环境
default:告诉mybatis使用哪个数据库的拦截信息,也就是访问哪个数据库
<environment id="development">
id:一个唯一值,自定义,表示环境的名称。
<transactionManager type="JDBC"/>
type:JDBC(表示使用jdbc中connection对象的commit,rollback做事务处理)
<dataSource type="POOLED">
dataSource:表示数据源,连接数据库的
type:表示数据库的类型,pooled表示使用连接池
<property name="driver" value="${driver}"/>
数据库驱动类名
<property name="url" value="${url}"/>
连接数据库的url字符串
<property name="username" value="${username}"/>
访问数据库的用户名
<property name="password" value="${password}"/>
密码
driver,url,username,password是固定的,不能自定义。
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
<mappers>:sql mapper(sql映射文件)的位置
<mapper resource="org/mybatis/example/BlogMapper.xml"/>:从类路径开始的路径信息。
主配置文件提供了数据库的连接信息和sql映射文件的位置信息
7.创建使用mybaits类:
通过mybaits访问数据库
public class MyApp{
public static void main(String [] args )throws IOException{
//访问mybatis读取student数据
//1:定义mybatis主配置文件的名称,从类路径的根开始(target/clasess)
string config ="mybatis.xml";
//2:读取这个config表示的文件
InputStream in = Resources.getResourceAsStream(config);
//3:创建了SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder builder = new sqlSessionFactorBuilder();
//4:创建SqlSessionFactory对象
SqlSessionFactory factory = builder.build(in)
//5:获取SqlSession对象,从SqlSessionFactory中获取SqlSession
SqlSession SqlSession= factory.openSession();
//6:指定要执行的sql语句的标识。sql映射文件中的namesapce+"."+标签的id值
String sqlId=" "
//7:执行sql语句
List<student> studentlist = sqlsession.selectList(sqlId);
//8:输出结果
for(student stu : studentList){
system.out.println("查询学生="+stu);
}
//9:关闭SqlSssion对象
sqlSession。close();
}
}
浙公网安备 33010602011771号