mybatis 与 hibernate 区别 :
mybatis 相比于hibernate 需要关心很多细节 hibernate体系比较庞大
mybatis是什么? 是持久层框架 支持定制化SQL (简便的操作sql)
--------------------------------------------------------------------------------------------------------------------
要使用 MyBatis, 需要导入架包 》》 [mybatis-x.x.x.jar]
如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
===========================================================================================
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。
-----------输入流(inputStream)加载外部文件进行配置 输入流可以是多种形式 ,字节流 ,字符流等
-----------mybatis-config.xml 配置文件:需要配置 链接数据库
String resource = "org/mybatis/example/mybatis-config.xml";(这是本地路径加载方式)
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder();
SqlSession session = sqlSessionFactory.openSession();
sqlSessionFactory 打开session的操作默认不支持事务的提交
session.commit 提交事务 ; 或者指定new SqlSessionFactoryBuilder(true); 则自动提交事务
XML 配置文件(configuration XML)中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)。XML 配置文件的详细内容后面再探讨,这里先给出一个简单的示例:
<?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="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/java12/mybatis/entity/BlogMapper.xml"/>
</mappers>
</configuration>
environment 元素体中包含了事务管理和连接池的配置。mapper 元素体中包含了SQL代码和映射定义的信息
SQL代码则是对映射信息的sql语句操作 (由此我们需要创建数据库 ,需要数据库里的数据表 和对数据表内数据定义的实体类 )
现在我创建了数据库mybatis数据库,里面创建数据表user ,有ID ,Title 两个属性 实体类定义示例:(生成setter方法,为了方便显示值 生成ToString方法)
package com.java12.mybatis.entity;
public class Blog {
private int id;
private String title;
public void setId(int id) {this.id = id;}
public void setTitle(String title) {this.title = title;}
@Override
public String toString() {
return "Blog{" +"id=" + id +", title='" + title + '\'' +'}';}
}
BlogMapper.xml 则是具体的对映射值信息的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="com.java12.mybatis.entity.Blog">
select * from user where id = #{id} // #{} 在这里仅当做站位符
</select>
</mapper>
创建main方法测试示例:
package com.java12.mybatis.demo;
public class MybatisDemo {
public static void main(String[] args) throws IOException {
//链接数据库
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(inputStream);
System.out.println(build);
//执行sql语句的封装方法
SqlSession session = build.openSession(true);
//调用查询方法查询数据表内title存在的对应值
selectUser("title",session);
}
public static User selectUser(String title,SqlSession session){
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectUser(title);
return user;