java具名参数_spring使用JdbcTemplate和jdbcDaosupport及具名参数使用

packagecom.spring.bean.jdbc;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importorg.junit.Test;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importorg.springframework.dao.DataAccessException;importorg.springframework.jdbc.core.BeanPropertyRowMapper;importorg.springframework.jdbc.core.JdbcTemplate;importorg.springframework.jdbc.core.RowMapper;importorg.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;importorg.springframework.jdbc.core.namedparam.MapSqlParameterSource;importorg.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;importorg.springframework.jdbc.core.namedparam.SqlParameterSource;public classMainTest {private ApplicationContext ctx=null;privateStudentsDao studentsDao;privateJdbcTemplate jdbcTemplate;privateNamedParameterJdbcTemplate namedParameterJdbcTemplate;privateCourseDao courseDao;

{

ctx=new ClassPathXmlApplicationContext("bean.xml");

jdbcTemplate=(JdbcTemplate) ctx.getBean("jdbcTemplate");

studentsDao=(StudentsDao) ctx.getBean("studentsDao");

namedParameterJdbcTemplate=(NamedParameterJdbcTemplate)ctx.getBean("namedParameterJdbcTemplate");

courseDao=(CourseDao) ctx.getBean("courseDao");

}

/**

*更新某一条操作

*/

@Testpublic voidgetCourse(){

String sql="SELECT * from course WHERE id=?";

Course course= courseDao.getCourse(sql,1);

System.out.println(course);

}/*** 使用具名参数操作数据库(可以为字段起名)

* 优点就是:当字段较多,不用考虑字段的顺序,效率高,即key,value的形式

* 缺点:麻烦代码量多*/@Testpublic voidtestnamedParameterJdbcTemplate(){

String sql="INSERT INTO students ( name, sex, age, tel) VALUES (:n, :s, :a, :t)";

Map paramMap=new HashMap();

paramMap.put("n", "rongrong");

paramMap.put("s", "man");

paramMap.put("a", "25");

paramMap.put("t", "18612396984");

namedParameterJdbcTemplate.update(sql, paramMap);

}/*** 使用具名参数操作数据库

* 使用update(String sql, SqlParameterSource paramSource)方法传入实体参数

* 要求:sql的字段名称与对象属性名称一致

* SqlParameterSource paramSource*/@Testpublic voidtestnamedParameterJdbc(){

String sql="INSERT INTO course (coursename, coursenameid) VALUES (:coursename, :coursenameid);";

Course course= newCourse();

course.setCoursenameid("As-1001");

course.setCoursename("java");

SqlParameterSource paramSource= newBeanPropertySqlParameterSource(course);

namedParameterJdbcTemplate.update(sql, paramSource);

}/*** 修改数据库某条属性*/@Testpublic voidtestUpdate(){

String sql="UPDATE students SET `name`=? WHERE id=? ";

jdbcTemplate.update(sql,"lucy",1);

}/*** 批量更新数据

* List此处为对象数组

* 必须为对象数组,插入一条数据如:{"MT-1","man",17,"13706063546"}

* 如为多条数据,那么必须为对象数组*/@Testpublic voidtestBatchUpdate(){

String sql="INSERT INTO students ( name, sex, age, tel) VALUES (?, ?, ?, ?)";

List batchArgs=new ArrayList();

batchArgs.add(new Object[]{"MT-1","man",17,"13706063546"});

batchArgs.add(new Object[]{"MT-2","man",18,"13706063547"});

batchArgs.add(new Object[]{"MT-3","man",19,"13706063548"});

batchArgs.add(new Object[]{"MT-4","man",20,"13706063549"});

jdbcTemplate.batchUpdate(sql, batchArgs);

}/*** 查询返回一个实体对象集合

* 注意调用的不是 queryForList 方法*/@Testpublic voidtestQueryForList(){

String sql="SELECT id,name, sex, age, tel FROM students";

RowMapper rowMapper = new BeanPropertyRowMapper(Students.class);

List students =jdbcTemplate.query(sql, rowMapper);//不是 queryForList 方法//List students = jdbcTemplate.queryForList(sql, Students.class);

System.out.println(students);

}/*** 从数据库中获取一条记录, 实际得到对应的一个对象

* 注意不是调用 queryForObject(String sql, Class requiredType, Object... args) 方法!

* 而需要调用 queryForObject(String sql, RowMapper rowMapper, Object... args)

* 1. 其中的 RowMapper 指定如何去映射结果集的行, 常用的实现类为 BeanPropertyRowMapper

* 2. 使用 SQL 中列的别名完成列名和类的属性名的映射. 例如 name, sex, age, tel

* 3. 不支持级联属性. JdbcTemplate 到底是一个 JDBC 的小工具, 而不是 ORM 框架*/@Testpublic voidtestQueryForObject(){

String sql="SELECT id,name, sex, age, tel FROM students WHERE id=?";

RowMapper rowMapper = new BeanPropertyRowMapper(Students.class);

Students students= jdbcTemplate.queryForObject(sql, rowMapper,1);

System.out.println(students);

}/*** 获取单个列的值, 或做统计查询

* 使用 queryForObject(String sql, Class requiredType)

* 其中:requiredType为Integer.class可以达到统计查询的效果

* 使用 int queryForInt(String sql) throws DataAccessException,可实现*/@Testpublic voidtestQueryForINt(){

String sql="SELECT count(id) FROM students ";//RowMapper rowMapper = new BeanPropertyRowMapper(Students.class);

int long1 =jdbcTemplate.queryForInt(sql);//Integer long1 = jdbcTemplate.queryForObject(sql, Integer.class);//不是 queryForList 方法//List students = jdbcTemplate.queryForList(sql, Students.class);

System.out.println(long1);

}/*** 根据用户id,返回用户对象*/@Testpublic voidgetStudents(){

String sql="SELECT id,name, sex, age, tel FROM students WHERE id=?";

System.out.println(studentsDao.getStudent(sql,4));

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值