MyBatis工具类的封装与演示

一、原生原理

1.dao层接口

public interface UserDao {
    public User selectById(int id);
}

2.实体类

public class User {
    private Integer id;
    private String name;
    private String password;
}

3.Mapper.xml

<!--UserMapper.xml相当于UserDao接口实现类  namespace:关联指定接口-->
<!-- select:表示里面的sql语句为查询,id:关联方法
         resultType:返回值类型
         #{id}: id名和方法参数的名称一致
    -->
<mapper namespace="com.qf.dao.UserDao">
    <select id="selectById" resultType="com.qf.entity.User">
        select * from user where id=#{id}
    </select>
</mapper>

4.测试类

这是最初开始时获取导dao层执行对象的方法

 @Test
    public void selectById() throws IOException {
        //从资源目录中得到mybatis-config.xml的资源
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //根据mybatis资源,得到SqlSessionFactory对象
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
        //根据工厂获取连接对象SqlSession
        SqlSession sqlSession = factory.openSession();
        //根据连接对象得到UserDao执行对象
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        //对dao层方法的调用进行测试
        User user = mapper.selectById(1);
        System.out.println(user);
    }

这是封装为工具类之后的

  //共享的数据工厂
    private static SqlSessionFactory factory;
    //根据导入日志以及输出的日志判断
    //mybatis中使用了事务,要保证事务与dao连接的对象是同一个所以需要ThreadLocal管理
    private final static ThreadLocal<SqlSession> TH=new ThreadLocal();
    //静态代码块
    static {
        try {
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            factory = new SqlSessionFactoryBuilder().build(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static SqlSession openSession(){
        SqlSession session=TH.get();
        //对连接对象为null与否进行判断
        if (session==null){
            session=factory.openSession();
            TH.set(session);//存储session对象,方便之后在使用过程中进行调用
        }
       return session;
    }
    //使用泛型
    //使用泛型的方法可以保证,当我们在测试层调用该方法时,传入的实体对象是谁,就能得到对应的实体
    public static <T> T getMapper(Class<T> cla){
        SqlSession session=openSession();
        return session.getMapper(cla);
    }

    public static void commit(){
        SqlSession session=openSession();
        session.commit();//事务的提交
        closeAll();//事务的关闭
    }
    public static void rollback(){
        SqlSession session=openSession();
        session.rollback();//事务的回滚
        closeAll();//事务的关闭
    }
    private static void closeAll(){//用于关闭session
        SqlSession session=openSession();
        session.close();//对session进行关闭
        TH.remove();//移除ThreadLocal里面的session
    }
    public static SqlSession getSession(){
        return factory.openSession();
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于数据加密,Spring Boot和MyBatis可以结合使用。以下是一种常见的数据加密方案: 1. 在Spring Boot项目中,可以使用Java的加密库(如Jasypt、Bouncy Castle等)来进行数据加密。这些库提供了各种加密算法和工具类,可以轻松地实现数据的加密和解密操作。 2. 在MyBatis中,可以通过自定义类型处理器(TypeHandler)来实现对加密数据的处理。自定义类型处理器可以将数据库中的加密数据解密为明文,并在向数据库插入数据时将明文加密为密文。 下面是一个示例代码,演示了如何在Spring Boot和MyBatis中实现数据加密功能: 1. 创建一个加密工具类,例如 EncryptUtils,用于封装加密和解密操作的方法。这个类可以使用任何合适的加密库来实现具体的加密算法。 ```java public class EncryptUtils { // 使用加密库进行数据加密 public static String encrypt(String data) { // 实现加密算法 // ... return encryptedData; } // 使用加密库进行数据解密 public static String decrypt(String encryptedData) { // 实现解密算法 // ... return decryptedData; } } ``` 2. 创建一个自定义类型处理器,在MyBatis中使用这个处理器来处理加密数据的读写操作。 ```java @MappedTypes(String.class) public class EncryptedStringTypeHandler extends BaseTypeHandler<String> { @Override public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException { // 将明文数据加密后存入数据库 ps.setString(i, EncryptUtils.encrypt(parameter)); } @Override public String getNullableResult(ResultSet rs, String columnName) throws SQLException { // 从数据库读取加密数据并解密 return EncryptUtils.decrypt(rs.getString(columnName)); } @Override public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException { // 从数据库读取加密数据并解密 return EncryptUtils.decrypt(rs.getString(columnIndex)); } @Override public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { // 从数据库读取加密数据并解密 return EncryptUtils.decrypt(cs.getString(columnIndex)); } } ``` 3. 在MyBatis的配置文件中注册自定义类型处理器。 ```xml <typeHandlers> <typeHandler handler="com.example.EncryptedStringTypeHandler"/> </typeHandlers> ``` 4. 在Spring Boot中配置MyBatis,使其加载自定义类型处理器。 ```java @Configuration @MapperScan("com.example.mapper") public class MyBatisConfig { @Bean public ConfigurationCustomizer mybatisConfigurationCustomizer() { return configuration -> configuration.getTypeHandlerRegistry().register(String.class, EncryptedStringTypeHandler.class); } } ``` 通过以上步骤,您就可以在Spring Boot项目中使用MyBatis进行数据库操作,并对需要加密的数据进行加密和解密处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值