• JAVA 框架-Spring-jdbc


    Spring数据库查询模版---JdbcTemplate,该类是spring提供的数据库查询类,不如mybatis好用

    配置文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xmlns:p="http://www.springframework.org/schema/p"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
    	<!-- 引入数据库的连接 -->
    	<context:property-placeholder
    		location="classpath:conf/db.properties" />
    	<!-- 配置数据源 -->
    	<bean id="dataSource"
    		class="org.springframework.jdbc.datasource.DriverManagerDataSource"
    		p:username="${jdbc.user}" p:password="${jdbc.pword}"
    		p:url="${jdbc.url}" p:driverClassName="${jdbc.classname}"></bean>
    	<!-- spring提供的查询模板 -->
    	<bean class="org.springframework.jdbc.core.JdbcTemplate"
    		p:dataSource-ref="dataSource"></bean>
    </beans>
    

     数据库信息单独写在一个文件里:

    #不要写username
    jdbc.user=test0315
    jdbc.pword=123456
    jdbc.url=jdbc:oracle:thin:@localhost:1521:xe
    jdbc.classname=oracle.jdbc.OracleDriver
    

    增删改操作
        update(String sql, Object... obj);
    批量添加
        batchUpdate(sql, List<Object[]> lists);
    查询
        queryForMap(String sql, Object... obj); // 查询出一个Map集合, 返回结果必须并且只有一个, 否则报错
        queryForObject(String sql, RowMapper rowMapper); // 查询出一个对象, 返回结果必须并且只有一个, 否则报错, 这个方法必须添加一个RowMapper参数作为返回类型的映射
        queryForList(String sql, Class<?> type); // 查询结果只能有一列, 并且只支持Integer和String类型的
        queryForRowSqlSet(String sql, Object... obj);
        query(String sql, new BeanPropertyRowMapper<T>(T.class)); // 持久化查询
    代码示例

    package com.hanqi.test;
    //引入包省略
    
    class JunitTest {
    	private JdbcTemplate jdbcTemplate;
    	private ClassPathXmlApplicationContext c;
    
    	@BeforeEach
    	void setUp() throws Exception {
    		c = new ClassPathXmlApplicationContext("conf/spring.xml");
    		jdbcTemplate = c.getBean(JdbcTemplate.class);// 获取查询模板
    	}
    
    	@AfterEach
    	void tearDown() throws Exception {
    		c.close();
    	}
    
    	@Test
    	void test() {
    		// System.out.println(jdbcTemplate);
    		int r1 = jdbcTemplate.update("delete from appuser where ids = ?", 82);// 删除操作
    		int r2 = jdbcTemplate.update("insert into appuser(ids,uname,pword) values(sq_test.nextval,?,?)", "sina",
    				"1234");// 添加操作
    		// System.out.println(r);
    		String sql = "insert into appuser(ids,uname,pword) values(sq_test.nextval,?,?)";
    		List<Object[]> list = new ArrayList<>();
    		Object[] obj1 = { "qqq", "123" };
    		Object[] obj2 = { "www", "123" };
    		list.add(obj1);
    		list.add(obj2);
    		int[] a = jdbcTemplate.batchUpdate(sql, list);// 批量添加操作,sql语句会根据数据长度生成多条;
    		System.out.println(Arrays.toString(a));// 批量添加显示为[-2,-2],说明添加成功;
    		String sql2 = "select * from appuser where ids = ?";
    		Map<String, Object> map = jdbcTemplate.queryForMap(sql2, 61);
    		System.out.println(map);// 查询结果为map集合,键为列名
    		String sql3 = "select uname from appuser where ids = 65";
    		String b = jdbcTemplate.queryForObject(sql2, String.class);// 查什么类型写什么类型
    		System.out.println(b);
    
    	}
    
    }
    

    Spring声明式事务
    在操作数据库的过程中如果出现异常,则进行事务回滚。

    <import resource="classpath:conf/spring-beans.xml"/><!-- 引入另一个xml文件,该文件可写service类和dao类 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" p:dataSource-ref="dataSource"></bean><!-- 配置事务管理器 -->
    <tx:annotation-driven transaction-manager="transactionManager"/><!-- 开启事务管理器 -->
    

     同时在数据库访问实现类上进行注解:@Transactional

  • 相关阅读:
    MySQL++:Liunx
    MySQL++:liunx 安装 MySQL
    MySQL++:MySQL 相关机制参数解释说明
    linux++:Linux
    linux++:基本操作命令
    coding++:java正则表达式获取指定HTML标签的指定属性值
    mongodb++:mongodb 基本语法
    xml模块
    shelve模块简单用法
    shutil模块
  • 原文地址:https://www.cnblogs.com/wyc1991/p/9241355.html
Copyright © 2020-2023  润新知