一、Bee入门实例
Bee入门实例真的需要十分钟吗?
操作简单,只需在bee.properties里配置了DB相关的url,用户名,密码,
再用一句语句,就可得到对象。
1.
2.Java代码
SuidRich suidRich=BeeFactoryHelper.getSuidRich();
Orders orders=suidRich.selectById(new Orders(), 100001);
Logger.info(orders.toString());//打印
3. 导入jar或用maven,生成javabean,这些几种ORM都是需要的。
关键是Bee还提供了简单易用的生成Javabean工具;不需要xml配置。
再看下以下的例子对比,就知道以前的程序员是多累,现在的程序员,是多么的幸福!
想多些时间做核心业务,在CRUD中解放出来,Bee是你最好的选择。
二、Hibernate入门例子
1.下载Hibernate所需jar包
2.新建java项目,并导入jar包
3.新建User.java文件,User类的属性于数据库表的字段一一对应
4.新建User.hbm.xml文件,建立User类和p_user表的映射关系
<?xml version="1.0"?>
<!--
~ Hibernate, Relational Persistence for Idiomatic Java
~
~ License: GNU Lesser General Public License (LGPL), version 2.1 or later.
~ See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
-->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.model.User" table="p_user" lazy="false">
<id name="userId" column="user_id">
<generator class="increment"/>
</id>
<property name="userName" type="java.lang.String">
<column name="user_name" length="30"/>
</property>
<property name="userPwd" type="java.lang.String">
<column name="user_pwd"/>
</property>
<property name="userEmail" type="java.lang.String">
<column name="user_email"/>
</property>
</class>
</hibernate-mapping>
5.在src目录下新建hibernate.cfg.xml文件
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">Root</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/pblog</property>
<property name="hibernate.show_sql">true</property>
<mapping resource="com/model/User.hbm.xml"/>
<mapping class="com.model.User"/>
</session-factory>
</hibernate-configuration>
6.创建HibernateUtil工具类,用来获取hibernate的session对象
package com.utils;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
public class HibernateUtil {
private static SessionFactory factory = null;
static {
Configuration configuration = new Configuration().configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
.applySettings(configuration.getProperties())
.buildServiceRegistry();
factory = configuration.buildSessionFactory(serviceRegistry);
}
public static Session getSession() {
return factory.openSession();
}
}
7.创建UserDao.java文件,对User进行增删改查操作
import com.model.User;
import com.utils.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.Transaction;
public class UserDao {
public User getUserByID(int id)
{
Session session = HibernateUtil.getSession();
User user = (User)session.get(User.class, id);
session.close();
return user;
}
。。。
}
参考:
https://blog.csdn.net/weixin_40550726/article/details/83386210
看似有用, 但却多余,累赘的东西。
User.hbm.xml
hibernate.cfg.xm
每个dao相关的类,都布满这种代码。确实看是类似,甚至一样,但又需要我们写。
然后我们就变成了代码的苦力,不断重复编写类似代码。
看回一、Bee入门实例, 跳出原来的局限, 你会豁然开朗,有种海阔凭鱼跃的感觉!
三、Mybatis入门例子
4、于resources文件夹中创建SqlMapConfig.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>
<!-- 和spring整合后 environments配置将废除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 第一种方式,加载 resource-->
<mapper resource="User.xml"></mapper>
<mapper resource="UserMapper.xml"/>
<!-- 第三种方式,包扫描器要求(推荐使用此方式):
1、映射文件与接口同一目录下
2、映射文件名必需与接口文件名称一致
-->
<!--<package name="com.cenobitor.mapper"/>-->
</mappers>
</configuration>
6.配置SQL查询的映射文件(resources目录)
<?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">
<!-- namespace:命名空间,类似于java包,主要用于隔离sql语句的,后续有重要作用
#{}:占位符,相当于jdbc的?
${}:字符串拼接指令,注意如果入参为普通数据类型时,括号里面只能写value
-->
<mapper namespace="user">
<!-- id:sql id标识sql语句的唯一标识
parameterType:入参的数据类型
resultType:返回结果的数据类型
-->
<select id="getUserById" parameterType="int" resultType="com.cenobitor.pojo.User">
SELECT
`id`,
`username`,
`birthday`,
`sex`,
`address`
FROM `user`
WHERE id = #{id}
</select>
<!-- resultType:如果返回结果是集合时,只需要设置为元素的数据类型就可 -->
<select id="getUserByName" parameterType="String" resultType="com.cenobitor.pojo.User">
SELECT
`id`,
`username`,
`birthday`,
`sex`,
`address`
FROM `user`
WHERE username LIKE '%${value}%'
</select>
<insert id="insertUser" parameterType="com.cenobitor.pojo.User">
INSERT INTO USER (`username`,`birthday`,`sex`,`address`)
VALUES (#{username},#{birthday},#{sex},#{address})
</insert>
<!--返回MySql自增主键-->
<!-- useGeneratedKeys:标识插入使用自增id
keyProperty:与useGeneratedKeys配套使用,用于绑定主键接收的pojo属性
-->
<insert id="insertUserKey" parameterType="com.cenobitor.pojo.User"
useGeneratedKeys="true" keyProperty="id">
<!-- selectKey:用于配置主键返回
keyProperty:要绑定的pojo属性
resultType:属性数据类型
order:指定什么时候执行,AFTER之后
-->
<!-- <selectKey keyProperty="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey> -->
INSERT INTO USER (`username`,`birthday`,`sex`,`address`)
VALUES (#{username},#{birthday},#{sex},#{address})
</insert>
<!--返回MySql的uuid返回主键-->
<insert id="insertUserUUID" parameterType="com.cenobitor.pojo.User">
<!-- selectKey:用于配置主键返回
keyProperty:要绑定的pojo属性
resultType:属性数据类型
order:指定什么时候执行,AFTER之后
-->
<selectKey keyProperty="uuid" resultType="String" order="BEFORE">
SELECT UUID()
</selectKey>
INSERT INTO USER (`username`,`birthday`,`sex`,`address`,`uuid`)
VALUES (#{username},#{birthday},#{sex},#{address},#{uuid})
</insert>
<update id="updateUser" parameterType="com.cenobitor.pojo.User">
UPDATE USER SET username = #{username} WHERE id = #{id}
</update>
<delete id="deleteUser" parameterType="com.cenobitor.pojo.User">
DELETE FROM `user` WHERE `id` = #{id}
</delete>
</mapper>
7.加载映射文件,在SqlMapConfig.xml配置mappers节点
8.使用例子
package com.cenobitor;
import com.cenobitor.Utils.SqlSessionFactoryUtils;
import com.cenobitor.pojo.User;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
/**
* Unit test for simple App.
*/
public class AppTest extends TestCase {
//根据id查找用户
public void testGetUserById() throws IOException {
//创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
//查找配置文件,创建输入流
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//加载配置文件,创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = sfb.build(inputStream);
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行查询,参数一:要查询的statementId,参数二:sql语句入参
User user = sqlSession.selectOne("user.getUserById", 1);
//输入查询结果
System.out.println(user);
//释放资源
sqlSession.close();
}
//根据用户名查找用户列表
public void testGetUserByName(){
SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> list = sqlSession.selectList("user.getUserByName", "张");
for (User user : list) {
System.out.println(user);
}
sqlSession.close();
}
...
}
9、抽取SqlSessionFactoryUtils工具类,共享SqlSessionFactory的对象
public class SqlSessionFactoryUtils {
private SqlSessionFactoryUtils(){}
private static class SqlSessionFactoryInstance{
public static SqlSessionFactory sqlSessionFactory;
static {
try {
sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("SqlMapConfig.xml"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static SqlSessionFactory getSqlSessionFactory(){
return SqlSessionFactoryInstance.sqlSessionFactory;
}
}
参考:https://www.cnblogs.com/gdwkong/p/8734020.html
Mybatis需要
User.xml
UserMapper.xml
UserMapper接口
而Bee 根据其它条件查询,无需提前准备接口,无需写sql
Orders orders1=new Orders();
orders1.setName("Bee");
List<Orders> list=suidRich.select(orders1);
//Bee 根据其它条件查询,无需提前准备接口,无需写sql
Orders orders2=new Orders();
orders2.setUserid("myuserId");
List<Orders> list2=suidRich.select(orders2);
Bee可以做到:
智能化自动过滤null和空字符串,不再需要写判断非空的代码。
动态/任意组合查询条件,不需要提前准备dao接口,有新的查询需求也不用修改或添加接口。
复杂查询前后端可自动解析。
看回一、Bee入门实例, 跳出原来的局限, 你会豁然开朗,有种天高任鸟飞的感觉!
使用Bee, 不需要再写些多余的固定代码了, 让你不再是只会写CRUD的菜单,可以有更多的时间来学更加高级的技术!