Mybatids学习篇二

                           使用MyBatis对表执行CRUD操作


1、添加Mybatis的配置文件conf.xml


2、定义表所对应的实体类,


3、定义操作users表的sql映射文件userMapper.xml

<?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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
            例如namespace="com.users.mapping.userMapper"就是com.users.mapping(包名)+userMapper(userMapper.xml文件去除后缀)
  -->
<mapper namespace="com.users.mapping.userMapper">
     <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复
                          使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
          resultType="com.User"就表示将查询结果封装成一个User类的对象返回
          User类就是users表所对应的实体类
     -->
     <!-- 
              根据id查询得到一个user对象
      -->
     <select id="getUser" parameterType="int" 
         resultType="com.users.Users">
         select * from users where id=#{id}
     </select>
     
     <!-- 创建用户(Create) -->
     <insert id="addUser" parameterType="com.users.Users">
         insert into users(name,age) values(#{name},#{age})
     </insert>
     
     <!-- 删除用户(Remove) -->
     <delete id="deleteUser" parameterType="int">
        delete from users where id=#{id}
     </delete>
     
     <!-- 修改用户(Update) -->
     <update id="updateUser" parameterType="com.users.Users">
         update users set name=#{name},age=#{age} where id=#{id}
     </update>
     
     <!-- 查询全部用户-->
     <select id="getAllUsers" resultType="com.users.Users">
         select * from users
     </select>
     
</mapper>

4、定义sql映射的接口

  UserMapperI接口的代码如下:

package com.users.mapping;


import java.util.List;


import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;


import com.users.Users;


public interface UserMapperI {
/**
 * @author w_little
 * 定义sql映射的接口,使用注解指明方法要执行的SQL
 */
 
  //使用@Insert注解指明add方法要执行的SQL
    @Insert("insert into users(name, age) values(#{name}, #{age})")
    public int add(Users user);
    
    //使用@Delete注解指明deleteById方法要执行的SQL
    @Delete("delete from users where id=#{id}")
    public int deleteById(int id);
    
    //使用@Update注解指明update方法要执行的SQL
    @Update("update users set name=#{name},age=#{age} where id=#{id}")
    public int update(Users user);
    
    //使用@Select注解指明getById方法要执行的SQL
    @Select("select * from users where id=#{id}")
    public Users getById(int id);
    
    //使用@Select注解指明getAll方法要执行的SQL
    @Select("select * from users")
         public List<Users> getAll();
}

5、conf.xml文件中注册这个映射接口

<mappers>

      <mapper resource="com/users/mapping/userMapper.xml"/>

 <!-- 注册UserMapper映射接口-->
  <mapper class="com.users.mapping.UserMapperI"/>
</mappers>

6、用到的MyBatisUtil工具类代码如下

package com.util;



import java.io.InputStream;


import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;




public class MybatisUtil {
/**
     * 获取SqlSessionFactory
     * @return SqlSessionFactory
     */
   public static SqlSessionFactory getSqlSessionFactory() {
    //mybatis的配置文件
        String resource = "conf.xml";
        //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
             InputStream is = MybatisUtil.class.getClassLoader().getResourceAsStream(resource);
             //构建sqlSession的工厂
             SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
            
        return factory;
    }
    
    /**
           * 获取SqlSession
           * @return SqlSession
      */
      public static SqlSession getSqlSession() {
       //创建能执行映射文件中sql的sqlSession
       return getSqlSessionFactory().openSession();
    }
     
    /**
     * 获取SqlSession
     * @param isAutoCommit 
     *    true 表示创建的SqlSession对象在执行完SQL之后会自动提交事务
   * false 表示创建的SqlSession对象在执行完SQL之后不会自动提交事务,这时就需要我们手动调用sqlSession.commit()提交事务
     * @return SqlSession
     */
    public static SqlSession getSqlSession(boolean isAutoCommit) {
       return getSqlSessionFactory().openSession(isAutoCommit);
    }
}

7、单元测试类的代码如下:

package com.user.test;


import java.util.List;


import org.apache.ibatis.session.SqlSession;
import org.junit.Test;


import com.users.Users;
import com.users.mapping.UserMapperI;
import com.util.MybatisUtil;


public class Test1 {


@Test
public void testAdd() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
/**
* 得到UserMapperI接口的实现类对象, UserMapperI接口的实现类对象由
* sqlSession.getMapper(UserMapperI.class)动态构建出来
*/
UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
Users user = new Users();
user.setName("用户zxw");
user.setAge(20);
int add = mapper.add(user);
// 使用SqlSession执行完SQL之后需要关闭SqlSession
sqlSession.close();
System.out.println(add);

}


@Test
public void testUpdate() {
SqlSession sqlSession = MybatisUtil.getSqlSession(true);
/**
* 得到UserMapperI接口的实现类对象
* mUserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来
*/
UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
Users user = new Users();
user.setId(1);
user.setName("用户lxw");
user.setAge(56);
// 执行修改操作
int retResult = mapper.update(user);
// 使用SqlSession执行完SQL之后需要关闭SqlSession
sqlSession.close();
System.out.println(retResult);




}


@Test
public void testDelete() {
SqlSession sqlSession = MybatisUtil.getSqlSession(true);
/**
* 得到UserMapperI接口的实现类对象
* mUserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来
*/
UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
// 执行删除操作
int retResult = mapper.deleteById(7);
// 使用SqlSession执行完SQL之后需要关闭SqlSession
sqlSession.close();
System.out.println(retResult);

}


@Test
public void testGetUser() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
// 得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来
UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
// 执行查询操作,将查询结果自动封装成User返回
Users user = mapper.getById(8);
// 使用SqlSession执行完SQL之后需要关闭SqlSession
sqlSession.close();
System.out.println(user);

}


@Test
public void testGetAll() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
// 得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来
UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
// 执行查询操作,将查询结果自动封装成List<User>返回
List<Users> lstUsers = mapper.getAll();
// 使用SqlSession执行完SQL之后需要关闭SqlSession
   sqlSession.close();
System.out.println(lstUsers);

}
}

需求响应动态冰蓄冷系统与需求响应策略的优化研究(Matlab代码实现)内容概要:本文围绕“需求响应动态冰蓄冷系统与需求响应策略的优化研究”展开,基于Matlab代码实现,重点探讨了冰蓄冷系统在电力需求响应背景下的动态建模与优化调度策略。研究结合实际电力负荷与电价信号,构建系统能耗模型,利用优化算法对冰蓄冷系统的运行策略进行求解,旨在降低用电成本、平衡电网负荷,并提升能源利用效率。文中还提及该研究为博士论文复现,涉及系统建模、优化算法应用与仿真验证等关键技术环节,配套提供了完整的Matlab代码资源。; 适合人群:具备一定电力系统、能源管理或优化算法基础,从事科研或工程应用的研究生、高校教师及企业研发人员,尤其适合开展需求响应、综合能源系统优化等相关课题研究的人员。; 使用场景及目标:①复现博士论文中的冰蓄冷系统需求响应优化模型;②学习Matlab在能源系统建模与优化中的具体实现方法;③掌握需求响应策略的设计思路与仿真验证流程,服务于科研项目、论文写作或实际工程方案设计。; 阅读建议:建议结合提供的Matlab代码逐模块分析,重点关注系统建模逻辑与优化算法的实现细节,按文档目录顺序系统学习,并尝试调整参数进行仿真对比,以深入理解不同需求响应策略的效果差异。
综合能源系统零碳优化调度研究(Matlab代码实现)内容概要:本文围绕“综合能源系统零碳优化调度研究”,提供了基于Matlab代码实现的完整解决方案,重点探讨了在高比例可再生能源接入背景下,如何通过优化调度实现零碳排放目标。文中涉及多种先进优化算法(如改进遗传算法、粒子群优化、ADMM等)在综合能源系统中的应用,涵盖风光场景生成、储能配置、需求响应、微电网协同调度等多个关键技术环节,并结合具体案例(如压缩空气储能、光热电站、P2G技术等)进行建模与仿真分析,展示了从问题建模、算法设计到结果验证的全流程实现过程。; 适合人群:具备一定电力系统、能源系统或优化理论基础,熟悉Matlab/Simulink编程,从事新能源、智能电网、综合能源系统等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①开展综合能源系统低碳/零碳调度的科研建模与算法开发;②复现高水平期刊(如SCI/EI)论文中的优化模型与仿真结果;③学习如何将智能优化算法(如遗传算法、灰狼优化、ADMM等)应用于实际能源系统调度问题;④掌握Matlab在能源系统仿真与优化中的典型应用方法。; 阅读建议:建议结合文中提供的Matlab代码与网盘资源,边学习理论模型边动手调试程序,重点关注不同优化算法在调度模型中的实现细节与参数设置,同时可扩展应用于自身研究课题中,提升科研效率与模型精度。
本系统采用Java作为核心编程语言,基于Spring Boot框架构建,运行环境配置为JDK 1.8与Tomcat 7应用服务器。数据存储选用MySQL 5.7数据库,并借助Navicat 11进行数据库管理操作。开发工具可在Eclipse、MyEclipse或IntelliJ IDEA中任选,项目依赖管理通过Maven 3.3.9完成。 该简历管理平台在架构设计阶段,着重强化了代码结构的清晰度与可维护性,同时兼顾系统的实用价值与扩展灵活性。整体设计遵循通用化原则,确保后期维护简便,用户界面力求直观简洁。 系统通过标签分类机制实现功能模块化管理,主要包含以下三个角色维度: 管理员端涵盖综合管理功能:包括控制面板、用户账户管理、简历模板维护、模板分类设置、招聘会组织、报名信息处理、上传简历审核、求职社区管理、收藏夹维护及系统参数配置。 普通用户端提供个性化功能:涉及个人中心、招聘活动报名、简历文件上传及个人收藏记录管理。 公共访问端集成信息展示与交互模块:主要展示首页内容、简历模板库、招聘会资讯、简历上传入口、求职讨论区、系统公告栏,并提供个人中心入口、后台管理通道与在线客户服务。 该系统旨在通过结构化功能设计,提升简历相关数据的管理效率与组织化程度。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
在同一个项目中,MyBatis 和 MyBatis-Plus 是可以混合使用的。MyBatis-Plus 是基于 MyBatis 的增强框架,它在不破坏 MyBatis 原有功能的基础上,提供了许多便捷的功能扩展,例如通用操作的封装、逻辑删除、自动填充等企业级功能[^1]。由于 MyBatis-Plus 的底层仍然是基于 MyBatis 实现的,因此两者的整合非常自然且兼容性良好。 在实际开发中,可以通过以下方式实现两者的混合使用: 1. **引入依赖**:在项目中同时引入 MyBatis 和 MyBatis-Plus 的相关依赖,确保两者的版本兼容性。例如,在 `pom.xml` 文件中添加相应的 Maven 依赖。 2. **配置数据源和 MyBatis 配置**:在 Spring Boot 的配置文件 `application.yml` 或 `application.properties` 中,配置数据源和 MyBatis 的基础设置。MyBatis-Plus 会基于这些配置进行初始化。 3. **定义 Mapper 接口**: - 对于需要使用 MyBatis-Plus 的实体类,可以继承 `BaseMapper` 接口,从而获得一系列通用的 CRUD 操作。 - 对于需要自定义 SQL 的复杂操作,可以继续使用 MyBatis 的传统方式定义 Mapper 接口和 XML 映射文件。 4. **XML 映射文件的使用**:在某些复杂查询场景下,可以通过 MyBatis 的 XML 映射文件定义 SQL 语句,而这些文件的 `namespace` 和 `id` 需要与对应的 Mapper 接口和方法名保持一致,以确保映射关系的正确性[^2]。 5. **事务管理**:在混合使用 MyBatis 和 MyBatis-Plus 的情况下,事务管理仍然可以通过 Spring 的事务注解 `@Transactional` 来统一管理。 6. **避免冲突**:需要注意的是,在使用 MyBatis-Plus 的某些自动功能(如自动填充、逻辑删除)时,应确保这些功能不会与 MyBatis 的手动操作产生冲突。例如,逻辑删除功能会自动在查询中添加过滤条件,而在手动编写的 SQL 中可能需要额外处理这些逻辑。 ### 示例代码 以下是一个简单的示例,展示了如何在同一个项目中混合使用 MyBatis 和 MyBatis-Plus: #### 1. Mapper 接口定义 ```java // 使用 MyBatis-Plus 的 BaseMapper public interface UserPlusMapper extends BaseMapper<User> { } // 使用 MyBatis 的传统方式 public interface UserMapper { User selectUserById(Long id); } ``` #### 2. XML 映射文件 ```xml <!-- UserMapper.xml --> <mapper namespace="com.example.mapper.UserMapper"> <select id="selectUserById" resultType="com.example.entity.User"> select * from users where id = #{id} </select> </mapper> ``` #### 3. 服务层调用 ```java @Service public class UserService { @Autowired private UserPlusMapper userPlusMapper; @Autowired private UserMapper userMapper; public User getUserById(Long id) { // 使用 MyBatis-Plus 查询 return userPlusMapper.selectById(id); } public User getCustomUserById(Long id) { // 使用 MyBatis 查询 return userMapper.selectUserById(id); } } ``` 通过上述方式,可以在同一个项目中灵活地使用 MyBatis 和 MyBatis-Plus,充分发挥两者的优势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值