首页 > 其他分享 >使用Spring的NamedParameterJdbcTemplate完成DAO操作

使用Spring的NamedParameterJdbcTemplate完成DAO操作

时间:2023-07-02 13:02:28浏览次数:50  
标签:ps NamedParameterJdbcTemplate String Spring DAO stu sql new


NamedParameterJdbcTemplate内部包含了一个JdbcTemplate,所以JdbcTemplate能做的事情NamedParameterJdbcTemplate都能干,NamedParameterJdbcTemplate相对于JdbcTemplate主要增加了参数可以命名的功能。

public Object queryForObject(String sql, Map paramMap, RowMapper rowMapper)
public Object queryForObject(String sql, SqlParameterSource paramSource, RowMapper rowMapper)
       SqlParameterSource的两个主要实现MapSqlParameterSource
       和BeanPropertySqlParameterSource
public int update(String sql, SqlParameterSource paramSource, KeyHolder generatedKeyHolder)保存数据获得主键。

实例说明:

/**

 *一、NamedParameterJdbcTemplate提供了命名参数,用:x代替了?

 *NamedParameterJdbcTemplate传参数可以用map或者SqlParameterSource

 *用map的好处是:x,x的值可以自由取,但是所有参数的值都必须要放到map中去,其中的key为:后面的名称,value是你传的值

 *用SqlParameterSource的好处是不用一个个的赋值,但是:x中的x的值必须和对象的属性名称一样

 

*二、使用KeyHolder keyholder=new GeneratedKeyHolder();
   namedjdbctemp.update(sql, ps,keyholder);这个参数可以获得主键生成值
 */
publicclass StuDaoImple implements StuDaointer{ 
    private NamedParameterJdbcTemplate namedjdbctemp;
 
    public StuDaoImple(){
       namedjdbctemp=new NamedParameterJdbcTemplate(SQLConnUtil.getDataSource());
    }// SQLConnUtil为JDBC工具类,提供了得到数据源的静态方法
    /*
     * 这里会用到NamedParameterJdbcTemplate两个好处:
    
    
    
    publicvoid addStu(Stu stu) {
       String sql="insert into stu values(:sname,:ssex,:sbrith)";
       //:后面的名称必须和stu属性名称一样
       SqlParameterSource ps=new BeanPropertySqlParameterSource(stu);
       KeyHolder keyholder=new GeneratedKeyHolder();
       namedjdbctemp.update(sql, ps,keyholder);
       //加上KeyHolder这个参数可以得到添加后主键的值
       int m=keyholder.getKey().intValue();
       System.out.println(m);
       //Map map=keyholder.getKeys();//这样可以得到联合主键的值
       //keyholder.getKeyList();//这样可以得到一些主主键值,若一次添加好几条记录
    }
    publicint count() {
       String sql="select count(*) from stu";
       //可以通过NamedParameterJdbcTemplate得到JdbcTemplate
       int m=namedjdbctemp.getJdbcOperations().queryForInt(sql);
       return m;
    }
 
    /*
     * 这里会用到NamedParameterJdbcTemplate另一个好处:
    
    
    publicvoid delStu(int sid) {
       String sql="delete stu where s_id=:id";
       Map map=new HashMap();
       map.put("id", sid);
       namedjdbctemp.update(sql, map);
    }
    public List getAllStu() {
       String sql="select s_id as sid,s_name as sname,s_sex as ssex,s_brith as sbrith from stu";
       List list=namedjdbctemp.getJdbcOperations().query(sql,new BeanPropertyRowMapper(Stu.class));
       return list;
    }
    public List getAllStu(Stu stu) {
       String sql="select s_id as sid,s_name as sname,s_sex as ssex,s_brith as sbrith from stu where s_id=:sid";
       SqlParameterSource ps=new BeanPropertySqlParameterSource(stu);
       returnnamedjdbctemp.query(sql, ps, new BeanPropertyRowMapper(Stu.class));
    }
    public Stu getOneStu(Stu stu) {
       String sql="select s_id as sid,s_name as sname,s_sex as ssex,s_brith as sbrith from stu where s_id=:sid";
       SqlParameterSource ps=new BeanPropertySqlParameterSource(stu);
       return (Stu)namedjdbctemp.queryForObject(sql, ps, new BeanPropertyRowMapper(Stu.class));
    }
    public String getStuName(Stu stu) {
       String sql="select s_name as sname from stu where s_name=:sname";
       SqlParameterSource ps=new BeanPropertySqlParameterSource(stu);
       return (String)namedjdbctemp.queryForObject(sql, ps, String.class);
    }
    publicvoid updStu(Stu stu) {
       String sql="update stu set s_name=:sname,s_sex=:ssex,s_brith=:sbrith where s_id=:sid";
       SqlParameterSource ps=new BeanPropertySqlParameterSource(stu);
       namedjdbctemp.update(sql, ps);
    }
}



 

标签:ps,NamedParameterJdbcTemplate,String,Spring,DAO,stu,sql,new
From: https://blog.51cto.com/u_16174476/6604505

相关文章

  • (六)Spring源码解析:Spring AOP源码解析
    〇、AOP概念Aspect:切面给业务方法增加到功能,切面泛指交叉业务逻辑。上例中的事务处理、日志处理就可以理解为切面。常用的切面是通知(Advice)。实际就是对主业务逻辑的一种增强。Pointcut:切入点切入点指声明的一个或多个连接点的集合,通过切入点指定一组方法。被标记为final......
  • 部署springboot项目到linux服务器
    1.使用Xshell连接服务器xshell免费版地址:家庭/学校免费-NetSarangWebsite(xshell.com)2.安装java运行环境sudoaptinstallopenjdk-8-jdk3.使用xftp上传后端jar包文件xftp免费版地址:家庭/学校免费-NetSarangWebsite(xshell.com)4.在xshell中使用命令......
  • SpringCloud学习(四)
    参考:https://blog.csdn.net/qq_25928447/article/details/124340264?spm=1001.2014.3001.5501消息队列之前如果需要进行远程调用,一般可以通过发送HTTP请求来完成,现在,可以使用第二种方式,就是消息队列,它能够将发送方发送的信息放入队列中,当新的消息入队时,会通知接收方进行处理......
  • 菜鸟学习Spring——SpringMVC注解版前台向后台传值的两种方式
    一、概述。在很多企业的开法中常常用到SpringMVC+Spring+Hibernate(mybatis)这样的架构,SpringMVC相当于Struts是页面到Contorller直接的交互的框架也是界面把信息传输到Contorller层的一种架构,通过这个架构可以让我们把页面和Contorller层解耦,使得开发人员的分工更加明确。二、代码演......
  • Spring 配置事务管理器方法的理解
    @BeanpublicPlatformTransactionManagertransactionManager(DataSourcedataSource){DataSourceTransactionManagertransactionManager=newDataSourceTransactionManager();transactionManager.setDataSource(dataSource);return......
  • SpringMVC的执行流程
    SpringMVC的执行流程要求掌握SpringMVC的执行流程了解SpringMVC的重要组件的作用概要我把整个流程分成三个阶段准备阶段匹配阶段执行阶段准备阶段在Web容器第一次用到DispatcherServlet的时候,会创建其对象并执行init方法init方法内会创建SpringWeb......
  • 【springboot】支持热部署
    加入依赖坐标<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency> 配置Compiler选项 按2下shift键,选择registry 修改配置后保存(ctrl+S)即可以热部署了或者直接点击更快......
  • 【springboot】配置项
    主要是properties和yml,可以互相转换(toyaml),如果是自己定义的变量,是可以通过@Value注解来从配置文件中注入对应配置的值。先看properties文件中的配置test.hello=Hello4再来看代码里面怎么用@RestControllerpublicclassTestController{@Value("${test.hello:TEST}")......
  • SpringBoot整合Kafka
    1、安装kafka这里我是用的是docker-compose方式安装(1)安装docker和docker-composesudoyuminstall-yyum-utilssudoyum-config-manager\--add-repo\https://download.docker.com/linux/centos/docker-ce.reposudoyuminstalldocker-cedocker-ce-clico......
  • 在 Kubernetes(k8s) 上部署 Spring Boot 应用程序:应用程序使用环境变量中的错误端口属
    如果我使用此配置启动部署(即先启动服务,然后启动部署)则pod在启动期间会失败。在日志中,我可以找到以下消息:***************************APPLICATIONFAILEDTOSTART***************************Description:Bindingtotargetorg.springframework.boot.autoconfigu......