一、Hibernate入门实例
1.1 代码例子
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class Client {
public static void main(String[] args) {
SessionFactory sf = new Configuration().configure().buildSessionFactory(); //为什么要有这种类似模板的语句
Session s = null;
Transaction t = null;
try{
//准备数据
UserModel um = new UserModel();
um.setUuid("1");
um.setUserId("id1");
um.setName("name1");
s = sf.openSession(); //为什么要有这种类似模板的语句
t = s.beginTransaction(); //为什么就一个语句s.save(um),也需要显示声明事务
s.save(um);
t.commit(); //为什么就一个语句s.save(um),也需要显示提交事务
}catch(Exception err){
t.rollback();
err.printStackTrace();
}finally{
s.close();
}
}
}
1.2 配置xxx.hbm.xml
1:与被描述的类同名 ,如:UserModel.hbm.xml
2:存放位置与所描述类存放在同一文件夹下
3:主要有如下四部分配置 :
(1)类和表的映射
(2)主键的映射
(3)类的属性和DB中字段的映射
(4)关系的映射
1.3 日志不够人性化, 看不懂
测试:直接在Elipse里面运行Client文件即可,运行结束,你将会看到在console输出:“Hibernate: insert into tbl_user (userId, name, age, uuid) values (?, ?, ?, ?)”,打开数据库的数据表,你会看到一条值已经加入了。
参考:https://www.jb51.net/article/123469.htm
二、MyBatis入门实例
2.1 代码例子
9 import org.apache.ibatis.session.SqlSession;
10 import org.apache.ibatis.session.SqlSessionFactory;
11 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
//插入用户
55 public void testInsertUser(){
56 SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();//1 这种代码,可以不用程序员写吗
57 SqlSession sqlSession = sqlSessionFactory.openSession();//2 这种代码,可以不用程序员写吗
58
59 User user = new User();
60 user.setUsername("貂蝉");
61 user.setSex("0");
62 user.setBirthday(new Date());
63 user.setAddress("吕布");
64
65 //执行插入语句
66 sqlSession.insert("user.insertUser",user);
67 //提交事务
68 sqlSession.commit(); //3 这种代码,可以不用程序员写吗
69 //释放资源
70 sqlSession.close(); //4 这种代码,可以不用程序员写吗
71 }
public class SqlSessionFactoryUtils {
2 private SqlSessionFactoryUtils(){}
3
4 private static class SqlSessionFactoryInstance{
5
6 public static SqlSessionFactory sqlSessionFactory;
7
8 static {
9 try {
10 sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("SqlMapConfig.xml"));
11 } catch (IOException e) {
12 e.printStackTrace();
13 }
14 }
15 }
16
17 public static SqlSessionFactory getSqlSessionFactory(){
18 return SqlSessionFactoryInstance.sqlSessionFactory;
19 }
20
21 }
2.2 写mapper配置文件
创建UserMapper.xml映射文件
那么简单, 还要写SQL语句??!!
37 <insert id="insertUser" parameterType="com.cenobitor.pojo.User">
38 INSERT INTO USER (`username`,`birthday`,`sex`,`address`)
39 VALUES (#{username},#{birthday},#{sex},#{address})
40 </insert>
2.3 日志,也是占位符, 虽然多了显示参数类型. 但还是与Hibernate一样:日志不够人性化, 看不懂
#{} 和${} 有区别,其中一个有注入风险。
参考:https://www.cnblogs.com/gdwkong/p/8734020.html
三、Bee入门实例
3.1 例子代码
两行Bee相关代码,就可以将数据插入DB。
参考: https://gitee.com/automvc/bee/
import org.teasoft.bee.osql.Suid;
import org.teasoft.exam.bee.osql.entity.Orders;
import org.teasoft.honey.osql.core.BeeFactoryHelper;
public class SimpleExam {
public static void main(String[] args) {
Suid suid=BeeFactoryHelper.getSuid(); //1
Orders orders1=new Orders();
orders1.setId(100001L);
orders1.setName("Bee(ORM Framework)");
suid.insert(orders1); //2
}
}
3.2 Bee无需要xml配置文件
3.3 日志友好,方便开发调试
3.3.1
[INFO] [Bee] insert SQL: insert into orders(id,name) values (?,?) [values]: 100001,Bee(ORM Framework)
[INFO] [Bee] | <-- Affected rows: 1
3.3.2
[INFO] [Bee] insert SQL: insert into orders(id,name) values (?,?) [values]: 100001,Bee(ORM Framework)
[INFO] [Bee] insert SQL: ( ExecutableSql )
insert into orders(id,name) values (100001,'Bee(ORM Framework)')
[INFO] [Bee] | <-- Affected rows: 1
多了一个:
insert into orders(id,name) values (100001,'Bee(ORM Framework)') -- 这个是可以直接运行的语句,方便开发人员调试
只需要添加配置:
bee.osql.showSql.showExecutableSql=true
3.3.3
[INFO] [Bee] insert SQL: insert into orders(id,name) values (?,?) [values]: 100001(Long),Bee(ORM Framework)(String)
[INFO] [Bee] insert SQL: ( ExecutableSql )
insert into orders(id,name) values (100001,'Bee(ORM Framework)')
[INFO] [Bee] | <-- Affected rows: 1
100001(Long),Bee(ORM Framework)(String)
只需要添加配置:
bee.osql.showSql.showType=true
bee.osql.showSql.showExecutableSql=true
参考: https://gitee.com/automvc/bee/
三种主要ORM框架入门实例都介绍完了,哪个更简单? 你更倾向于哪种呢?