前言:mybatis和hibernate的使用基本类似,不同之处在于mybatis需要自己手写sql语句,同时在hibernate和mybatis的配置中都有映射文件和配置文件,在hibernate中映射文件一般称为xxx.hbm.xml,配置文件名为hibernate.cfg.xml,而在mybatis中映射文件名一般为xxxMapper.xml,配置文件为configuration.xml
在hibernate的映射文件中,是表和实体类之间的映射关系,例如
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<!-- hibernate映射文件配置 -->
<hibernate-mapping>
<!--
class标签 配置映射关系
name属性 配置实体类
table属性 配置表名
-->
<class name="com.web.bean.Dept" table="dept">
<!--
id标签 配置主键
name属性 类中的属性
column属性 表中的字段
-->
<id name="deptno" column="deptno">
<!--
generator标签 配置主键生成策略
class属性 生成方式assigned(手工生成)
-->
<generator class="assigned"></generator>
</id>
<!--
property标签 配置非主键字段
name属性 类中的属性
column属性 表中的字段
-->
<property name="dname" column="dname"></property>
<property name="loc" column="loc"></property>
</class>
</hibernate-mapping>
而在mabits中映射文件配置的是实体类和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属性 命名空间
-->
<mapper namespace="test">
<!--
insert标签 新增
id属性 方法名称
parameterType属性 参数数据类型
#{} 表示占位符 类似预编译中的?
#{deptno} 从我实体类中取出属性名称的值放入占位符中
-->
<insert id="insertDept" parameterType="com.web.bean.Dept">
insert into dept(deptno,dname,loc) values(#{deptno},#{dname},#{loc})
</insert>
<!--
update标签 修改
-->
<update id="updateDept" parameterType="com.web.bean.Dept">
update dept set dname=#{dname},loc=#{loc} where deptno=#{deptno}
</update>
<!--
delete标签 删除
-->
<delete id="deleteDeptById" parameterType="java.lang.Integer">
delete from dept where deptno=#{deptno}
</delete>
<!--
select标签 查询单行数据
resultType属性 返回值的数据类型
-->
<select id="findDeptById" parameterType="java.lang.Integer" resultType="com.web.bean.Dept">
select deptno,dname,loc from dept where deptno=#{deptno}
</select>
<!--
select标签 查询返回多行
-->
<select id="findAllDept" resultType="com.web.bean.Dept">
select deptno,dname,loc from dept
</select>
<!--
${value} 以字符串拼的方式执行sql
-->
<select id="findDeptByDname" parameterType="java.lang.String" resultType="com.web.bean.Dept">
select deptno,dname,loc from dept where dname like '%${value}%'
</select>
<!--
预编译方式执行模糊查询
-->
<select id="findDeptByDname2" parameterType="java.lang.String" resultType="com.web.bean.Dept">
select deptno,dname,loc from dept where dname like #{dname}
</select>
</mapper>
hibernate的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name="connection.username">scott</property>
<property name="connection.password">123456</property>
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
<property name="show_sql">true</property>
<mapping resource="com/web/hbm/city.hbm.xml"/>
<mapping resource="com/web/hbm/dept.hbm.xml"/>
<mapping resource="com/web/hbm/emp.hbm.xml"/>
<mapping resource="com/web/hbm/product.hbm.xml"/>
<mapping resource="com/web/hbm/user.hbm.xml"/>
</session-factory>
</hibernate-configuration>
mybatis的配置文件
<?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">
<!-- 使用jdbc事务管理,目前由mybatis来管理 -->
<transactionManager type="JDBC"/>
<!-- 数据库连接池,目前由mybatis来管理 -->
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
<property name="username" value="scott" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- <mapper>标签用来配置映射文件的,可以有多个 -->
<mapper resource="com/web/mapper/DeptMapper.xml" />
</mappers>
</configuration>
hibernate的使用方式,通过session进行数据操作
package com.web.test;
import java.util.HashSet;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import com.web.bean.City;
import com.web.bean.Dept;
import com.web.bean.Emp;
import com.web.bean.User;
import com.web.bean.product;
public class test {
public static void main(String[] args) {
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
Session session =sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
product p = (product) session.get(product.class, 1);
User user = (User) session.get(User.class, 1001);
Set<User> users = p.getUsers();
for(User u :users){
System.out.println(u);
}
Set<product> products = user.getProducts();
for(product p1 : products){
p1.getUsers();
}
}
}
mybatis通过session操作数据
package com.web.test;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.web.bean.Dept;
public class Test {
public static void main(String[] args) {
//获取配置文件流对象
InputStream inputStream = Test.class.getClassLoader().getResourceAsStream("configuration.xml");
//创建Session工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
//打开Session
SqlSession session = factory.openSession();
// 新增
Dept d = new Dept(90,"教学部","五一路");
session.insert("test.insertDept",d);
//修改
//Dept d = new Dept(50,"教务部","芙蓉路");
//session.update("test.updateDept", d);
//删除
session.delete("test.deleteDeptById", 50);
//查询单行(对象)
// Dept d = session.selectOne("test.findDeptById", 10);
// System.out.println(d);
//查询返回多行(集合)
// List<Dept> list = session.selectList("test.findAllDept");
// for(Dept d : list){
// System.out.println(d);
// }
//模糊查询(sql拼接)
// List<Dept> list = session.selectList("test.findDeptByDname", "S");
// for(Dept d : list){
// System.out.println(d);
// }
//模糊查询(预编译)
// List<Dept> list = session.selectList("test.findDeptByDname2", "%S%");
// for(Dept d : list){
// System.out.println(d);
// }
//提交
session.commit();
//回滚
//session.rollback();
//关闭
session.close();
}
}
以上就是hibernate和mybatis的区别和简单使用