Java MySQL的Template封装使用

现象描述:

常规数据库数据查询都需要以下步骤:

  1. 确定连接的数据库类型《mysql,oracle,db2,moangdb,sqlservlet》

  2. 下载数据库驱动(http://mvnrepository.org),并把jar包添加到项目中

  3. 把数据库连接的驱动类加载到java虚拟机中

  4. 通过DriverManager类中getConnection方法获取到对应数据库连接对象

  5. 通过连接对象创建编译对象

  6. 通过编译对象想sql发出指令

  7. 接受并处理返回的结果

  8. 释放相关操作资源

简而言之就是四步:

  1. 注册驱动
  2. 连接数据库
  3. 执行sql语句
  4. 关闭连接,释放资源

通常每执行一次sql语句都需要进行上述的步骤,连接和关闭对数据库的资源耗费巨大。

解决:

则需要进行优化,减少关闭次数,资源在静态代码块加载完成。利用JdbcTemplate 进行更一步封装,利于日常开发。

以下为封装的工具类:


/*
	1. 声明静态数据源成员变量
	2. 创建连接池对象
	3. 定义公有的得到数据源的方法
	4. 定义得到连接对象的方法
	5. 定义关闭资源的方法
 */
public class JDBCUtils {
	// 1.	声明静态数据源成员变量
	private static DataSource ds;

	// 2. 创建连接池对象
	static {
		// 加载配置文件中的数据
		InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
		Properties pp = new Properties();
		try {

			pp.load(is);
			// 创建连接池,使用配置文件中的参数
			ds = DruidDataSourceFactory.createDataSource(pp);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 3. 定义公有的得到数据源的方法
	public static DataSource getDataSource() {
		return ds;
	}

	// 4. 定义得到连接对象的方法
	public static Connection getConnection() throws SQLException {
		return ds.getConnection();
	}

	// 5.定义关闭资源的方法
	public static void close(Connection conn, Statement stmt, ResultSet rs) {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {}
		}

		if (stmt != null) {
			try {
				stmt.close();
			} catch (SQLException e) {}
		}

		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {}
		}
	}

	// 6.重载关闭方法
	public static void close(Connection conn, Statement stmt) {
		close(conn, stmt, null);
	}
}

使用:


private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
public List<Category> findAll() {

     String sql = "select * from tab_category";
     return template.query(sql,new BeanPropertyRowMapper<Category>(Category.class));

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是代码实现。 首先是SMSTemplateDTO实体类: ```java public class SMSTemplateDTO { private Integer seqNo; private String templateId; private String pushPlanTpCd; private String templateName; private String templateContent; private String creatorNo; private Date createTime; private String modifierNo; private Date modTime; private String oprorInstno; // getter和setter方法省略 } ``` 接下来是Mapper.xml文件: ```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="com.example.mapper.SMSTemplateMapper"> <!-- 查询短信模板列表 --> <select id="getSMSTemplateList" resultType="com.example.dto.SMSTemplateDTO"> SELECT seq_no AS seqNo, template_id AS templateId, push_plan_tp_cd AS pushPlanTpCd, template_name AS templateName, template_content AS templateContent, creator_no AS creatorNo, create_time AS createTime, modifier_no AS modifierNo, mod_time AS modTime, opror_instno AS oprorInstno FROM t_sms_template ORDER BY seq_no </select> <!-- 根据seq_no查询短信模板 --> <select id="getSMSTemplateBySeqNo" parameterType="int" resultType="com.example.dto.SMSTemplateDTO"> SELECT seq_no AS seqNo, template_id AS templateId, push_plan_tp_cd AS pushPlanTpCd, template_name AS templateName, template_content AS templateContent, creator_no AS creatorNo, create_time AS createTime, modifier_no AS modifierNo, mod_time AS modTime, opror_instno AS oprorInstno FROM t_sms_template WHERE seq_no = #{seqNo} </select> <!-- 插入短信模板 --> <insert id="insertSMSTemplate" parameterType="com.example.dto.SMSTemplateDTO"> INSERT INTO t_sms_template (seq_no, template_id, push_plan_tp_cd, template_name, template_content, creator_no, create_time, modifier_no, mod_time, opror_instno) VALUES (#{seqNo}, #{templateId}, #{pushPlanTpCd}, #{templateName}, #{templateContent}, #{creatorNo}, #{createTime}, #{modifierNo}, #{modTime}, #{oprorInstno}) </insert> <!-- 更新短信模板 --> <update id="updateSMSTemplate" parameterType="com.example.dto.SMSTemplateDTO"> UPDATE t_sms_template SET template_id = #{templateId}, push_plan_tp_cd = #{pushPlanTpCd}, template_name = #{templateName}, template_content = #{templateContent}, modifier_no = #{modifierNo}, mod_time = #{modTime}, opror_instno = #{oprorInstno} WHERE seq_no = #{seqNo} </update> <!-- 删除短信模板 --> <delete id="deleteSMSTemplate" parameterType="int"> DELETE FROM t_sms_template WHERE seq_no = #{seqNo} </delete> </mapper> ``` 然后是Mapper接口: ```java public interface SMSTemplateMapper { List<SMSTemplateDTO> getSMSTemplateList(); SMSTemplateDTO getSMSTemplateBySeqNo(int seqNo); void insertSMSTemplate(SMSTemplateDTO smsTemplate); void updateSMSTemplate(SMSTemplateDTO smsTemplate); void deleteSMSTemplate(int seqNo); } ``` 接下来是Service实现类: ```java @Service public class SMSTemplateServiceImpl implements SMSTemplateService { @Autowired private SMSTemplateMapper smsTemplateMapper; @Override public List<SMSTemplateDTO> getSMSTemplateList() { return smsTemplateMapper.getSMSTemplateList(); } @Override public SMSTemplateDTO getSMSTemplateBySeqNo(int seqNo) { return smsTemplateMapper.getSMSTemplateBySeqNo(seqNo); } @Override public void insertSMSTemplate(SMSTemplateDTO smsTemplate) { smsTemplateMapper.insertSMSTemplate(smsTemplate); } @Override public void updateSMSTemplate(SMSTemplateDTO smsTemplate) { smsTemplateMapper.updateSMSTemplate(smsTemplate); } @Override public void deleteSMSTemplate(int seqNo) { smsTemplateMapper.deleteSMSTemplate(seqNo); } } ``` 最后是Controller: ```java @RestController @RequestMapping("/smsTemplate") public class SMSTemplateController { @Autowired private SMSTemplateService smsTemplateService; @GetMapping("/list") public RestResponse<List<SMSTemplateDTO>> getSMSTemplateList() { List<SMSTemplateDTO> smsTemplateList = smsTemplateService.getSMSTemplateList(); return RestResponse.success(smsTemplateList); } @GetMapping("/{seqNo}") public RestResponse<SMSTemplateDTO> getSMSTemplateBySeqNo(@PathVariable int seqNo) { SMSTemplateDTO smsTemplate = smsTemplateService.getSMSTemplateBySeqNo(seqNo); if (smsTemplate == null) { throw new BusinessException("短信模板不存在"); } return RestResponse.success(smsTemplate); } @PostMapping("/") public RestResponse<Void> insertSMSTemplate(@RequestBody SMSTemplateDTO smsTemplate) { smsTemplateService.insertSMSTemplate(smsTemplate); return RestResponse.success(); } @PutMapping("/{seqNo}") public RestResponse<Void> updateSMSTemplate(@PathVariable int seqNo, @RequestBody SMSTemplateDTO smsTemplate) { smsTemplate.setSeqNo(seqNo); smsTemplateService.updateSMSTemplate(smsTemplate); return RestResponse.success(); } @DeleteMapping("/{seqNo}") public RestResponse<Void> deleteSMSTemplate(@PathVariable int seqNo) { SMSTemplateDTO smsTemplate = smsTemplateService.getSMSTemplateBySeqNo(seqNo); if (smsTemplate == null) { throw new BusinessException("短信模板不存在"); } smsTemplateService.deleteSMSTemplate(seqNo); return RestResponse.success(); } } ``` 其中RestResponse是自定义的响应类,用于封装返回给前端的数据和状态码。BusinessException是自定义的异常类,用于处理业务异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值