最简单的ORM入门例子Hibernate,Mybatis,Bee

205 篇文章 0 订阅
45 篇文章 0 订阅

一、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的菜单,可以有更多的时间来学更加高级的技术!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值