拥抱jsx,开启vue3用法的另一种选择🔥🔥
Posted 辉哥的小园子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拥抱jsx,开启vue3用法的另一种选择🔥🔥相关的知识,希望对你有一定的参考价值。
Spring JDBC 框架中, 绑定 SQL 参数的另一种选择:具名参数(named parameter)
使用spring的jdbcTemplate-----使用具名参数
在JDBC用法中,SQL参数是用占位符?表示,并且受到位置的限制,定位参数的问题在于,一旦参数的位置发生变化,必须改变参数的绑定,在Spring JDBC中,绑定SQL参数的另一种选择是使用具名参数,SQL具名参数是按照名称绑定,而不是位置绑定。
什么是具名参数?
具名参数: SQL 按名称(以冒号开头)而不是按位置进行指定. 具名参数更易于维护, 也提升了可读性. 具名参数由框架类在运行时用占位符取代
具名参数只在 NamedParameterJdbcTemplate 中得到支持。(SImpleJdbcTemplate已过时了)
NamedParameterJdbcTemplate内部包含了一个JdbcTemplate,所以JdbcTemplate能做的事情NamedParameterJdbcTemplate都能干,NamedParameterJdbcTemplate相对于JdbcTemplate主要增加了参数可以命名的功能。
如何配置?
applicationContext.xml里的配置
<!-- 配置jdbc模板类 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 配置 NamedParameterJdbcTemplate,该对象可以使用具名参数。
但它没有无参构造器,所以必须为其制定构造参数,这里指定的是出c3p0数据源
-->
<bean id="namedParameterJdbcTemplate"
class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource"></constructor-arg>
</bean>
实例:
public class BaseService {
// JdbcTemplate 对象作为构造器参数初始化
@Autowired
protected NamedParameterJdbcTemplate namedParameterJdbcTemplate;
/**
* 数据查询
*
* @param sql
* @param object
* @return
*/
@SuppressWarnings("rawtypes")
public List<?> query(String sql, Object object) {
// BeanPropertySqlParameterSource封装了一个JavaBean对象,通过JavaBean对象属性来决定命名参数的值
SqlParameterSource source = new BeanPropertySqlParameterSource(object);
@SuppressWarnings("unchecked")
// BeanPropertyRowMapper自动将一行数据映射到指定类的实例中 它首先将这个类实例化,然后通过名称匹配的方式,映射到属性中去
List<?> list = namedParameterJdbcTemplate.query(sql, source, new BeanPropertyRowMapper(object.getClass()));
return list;
}
/**
* 数据添加、删除、修改
*
* @param sql
* @param object
* @return
*/
@SuppressWarnings("unchecked")
public int excute(String sql, Object object) {
if (object != null) {
// 判断类型
if (object instanceof Map) {
return namedParameterJdbcTemplate.update(sql, (Map<String, ?>) object);
} else {
BeanPropertySqlParameterSource source = new BeanPropertySqlParameterSource(object);
// 返回对象
return namedParameterJdbcTemplate.update(sql, source);
}
} else {
return namedParameterJdbcTemplate.getJdbcOperations().update(sql);
}
}
/**
* 查询记录数
*
* @param sql
* @param object
* @return
*/
public int queryCount(String sql, Object object) {
BeanPropertySqlParameterSource source = null;
if (object != null) {
source = new BeanPropertySqlParameterSource(object);
}
return namedParameterJdbcTemplate.queryForObject(sql, source, Integer.class);
}
}
NamedParameterJdbcTemplate类是基于JdbcTemplate类,并对它进行了封装从而支持命名参数特性。
NamedParameterJdbcTemplate主要提供以下三类方法:execute方法、query及queryForXXX方法、update及batchUpdate方法。
1)NamedParameterJdbcTemplate初始化:可以使用DataSource或JdbcTemplate 对象作为构造器参数初始化;
2)insert into test(name) values(:name):其中“:name”就是命名参数;
3) update(insertSql, paramMap):其中paramMap是一个Map类型,包含键为“name”,值为“name5”的键值对,也就是为命名参数设值的数据;
4)query(selectSql, paramMap, new RowCallbackHandler()……):类似于JdbcTemplate中介绍的,唯一不同是需要传入paramMap来为命名参数设值;
5)update(deleteSql, paramSource):类似于“update(insertSql, paramMap)”,但使用SqlParameterSource参数来为命名参数设值,此处使用MapSqlParameterSource实现,其就是简单封装java.util.Map。
NamedParameterJdbcTemplate类为命名参数设值有两种方式:java.util.Map和SqlParameterSource:
1)java.util.Map:使用Map键数据来对于命名参数,而Map值数据用于设值;
2)SqlParameterSource:可以使用SqlParameterSource实现作为来实现为命名参数设值,默认有MapSqlParameterSource和BeanPropertySqlParameterSource实现;MapSqlParameterSource实现非常简单,只是封装了java.util.Map;而BeanPropertySqlParameterSource封装了一个
JavaBean对象,通过JavaBean对象属性来决定命名参数的值。
/**
* 用户 服务类接口实现
*/
@Service
public class IUserServiceImpl extends BaseService implements IUserService {
public final static org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(IUserServiceImpl.class);
/**
* 查询用户
*/
@Override
public Object queryUser(String sql, Object object) {
User user = new User();
sql = "select suser as username,spassword as password,tcreatetime as createtime,cisenabled as enabled,cauthorize as authorize from sys_user";
// String sqls = "select suser as username,spassword as password,tcreatetime as createtime,cisenabled as enabled,cauthorize as authorize from sys_user where suser like ‘%:username%‘";
// 替换掉sql语句的条件
// sqls = sqls.replace(":username", user.getUsername());
@SuppressWarnings("unchecked")
List<User> list = (List<User>) query(sql, user);
return list;
}
/**
* 添加用户
*/
@Override
public MsgBean addUser(User user) {
MsgBean msg = new MsgBean();
try {
String sql = " insert into sys_user (suser,spassword,tcreatetime,cisenabled,cauthorize) values(:username,:password,:createtime,:enabled,:authorize)";
// 添加新用户是自动取得时间
// user.setCreatetime(DateUtil.getCurDate(null));
excute(sql, user);
msg.setFlag(true);
msg.setText("ok");
} catch (Exception e) {
logger.error("出错的原因。。。" + e.getMessage());
}
return msg;
}
/**
* 修改用户
*/
@Override
public MsgBean updateUser(User user) {
MsgBean msg = new MsgBean();
try {
String sql = " update sys_user set spassword=:password,tcreatetime=:createtime,cisenabled=:enabled,cauthorize=:authorize where suser=:username";
excute(sql, user);
msg.setFlag(true);
msg.setText("ok");
} catch (Exception e) {
logger.error("出错的原因。。。" + e.getMessage());
}
return msg;
}
/**
* 删除用户
*/
@Override
public MsgBean deleteUser(String username) {
MsgBean msg = new MsgBean();
try {
String sql = "delete from sys_user where suser =‘:username‘";
if (username != null && username.length() != 0) {
sql = sql.replace(":username", username);
}else {
msg.setFlag(false);
msg.setText("未知原因,删除失败");
return msg;
}
excute(sql, null);
msg.setFlag(true);
msg.setText("ok");
} catch (Exception e) {
logger.error("出错的原因。。。" + e.getMessage());
}
return msg;
}
}
User是用户实体类,MsgBean工具实体类里面有flag和text两个参数,又来输出信息的
/**
* 用户控制层
*/
@Controller
public class UserController {
private static final Log logger = LogFactory.getLog(UserController.class);
@Autowired
private IUserService userService;
/**
* 用户查询
*
* @param request
* @param response
* @return
*/
@ResponseBody
@RequestMapping("/queryuser")
public Object queryUserList(HttpServletRequest request, HttpServletResponse response) {
User user = new User();
// 模糊查询传来的值
// String username = request.getParameter("username");
// // 判断字符串是否为空
// if (StringUtil.isBlank(username)) {
// // 若为空替换为空字符串
// username = "";
// }
// user.setUsername(username);
Object obj = userService.queryUser(null, user);
return obj;
}
/**
* 用户添加
*
* @param user
* @return
*/
@ResponseBody
@RequestMapping("/adduser")
public MsgBean addUser(User user) {
MsgBean msg = null;
try {
msg = userService.addUser(user);
} catch (Exception e) {
logger.error("出错的原因 :" + e.getMessage());
}
return msg;
}
/**
* 用户修改
*
* @param user
* @return
*/
@ResponseBody
@RequestMapping("/updateuser")
public MsgBean updateUser(User user) {
MsgBean msg = null;
try {
msg = userService.updateUser(user);
} catch (Exception e) {
logger.error("出错的原因 :" + e.getMessage());
}
return msg;
}
/**
* 用户删除
*
* @param username
* @return
*/
@ResponseBody
@RequestMapping("/deleteuser")
public MsgBean deleteUser(@RequestParam("username") String username) {
MsgBean msg = null;
try {
msg = userService.deleteUser(username);
} catch (Exception e) {
logger.error("出错的原因 :" + e.getMessage());
}
return msg;
}
}
上述代码写好后,可以运行,因为没有前端jsp文件,所以可以直接在访问的网址后面加上?然后打上参数
以上是关于拥抱jsx,开启vue3用法的另一种选择🔥🔥的主要内容,如果未能解决你的问题,请参考以下文章
Spring JDBC 框架中, 绑定 SQL 参数的另一种选择:具名参数(named parameter)
[VB.NET Tips]Try...Catch...End Try的另一种用法
<!-- 配置jdbc模板类 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 配置 NamedParameterJdbcTemplate,该对象可以使用具名参数。 但它没有无参构造器,所以必须为其制定构造参数,这里指定的是出c3p0数据源 --> <bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"> <constructor-arg ref="dataSource"></constructor-arg> </bean>
public class BaseService { // JdbcTemplate 对象作为构造器参数初始化 @Autowired protected NamedParameterJdbcTemplate namedParameterJdbcTemplate; /** * 数据查询 * * @param sql * @param object * @return */ @SuppressWarnings("rawtypes") public List<?> query(String sql, Object object) { // BeanPropertySqlParameterSource封装了一个JavaBean对象,通过JavaBean对象属性来决定命名参数的值 SqlParameterSource source = new BeanPropertySqlParameterSource(object); @SuppressWarnings("unchecked") // BeanPropertyRowMapper自动将一行数据映射到指定类的实例中 它首先将这个类实例化,然后通过名称匹配的方式,映射到属性中去 List<?> list = namedParameterJdbcTemplate.query(sql, source, new BeanPropertyRowMapper(object.getClass())); return list; } /** * 数据添加、删除、修改 * * @param sql * @param object * @return */ @SuppressWarnings("unchecked") public int excute(String sql, Object object) { if (object != null) { // 判断类型 if (object instanceof Map) { return namedParameterJdbcTemplate.update(sql, (Map<String, ?>) object); } else { BeanPropertySqlParameterSource source = new BeanPropertySqlParameterSource(object); // 返回对象 return namedParameterJdbcTemplate.update(sql, source); } } else { return namedParameterJdbcTemplate.getJdbcOperations().update(sql); } } /** * 查询记录数 * * @param sql * @param object * @return */ public int queryCount(String sql, Object object) { BeanPropertySqlParameterSource source = null; if (object != null) { source = new BeanPropertySqlParameterSource(object); } return namedParameterJdbcTemplate.queryForObject(sql, source, Integer.class); }
}
/** * 用户 服务类接口实现 */ @Service public class IUserServiceImpl extends BaseService implements IUserService { public final static org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(IUserServiceImpl.class); /** * 查询用户 */ @Override public Object queryUser(String sql, Object object) { User user = new User(); sql = "select suser as username,spassword as password,tcreatetime as createtime,cisenabled as enabled,cauthorize as authorize from sys_user";
// String sqls = "select suser as username,spassword as password,tcreatetime as createtime,cisenabled as enabled,cauthorize as authorize from sys_user where suser like ‘%:username%‘"; // 替换掉sql语句的条件 // sqls = sqls.replace(":username", user.getUsername()); @SuppressWarnings("unchecked") List<User> list = (List<User>) query(sql, user); return list; } /** * 添加用户 */ @Override public MsgBean addUser(User user) { MsgBean msg = new MsgBean(); try { String sql = " insert into sys_user (suser,spassword,tcreatetime,cisenabled,cauthorize) values(:username,:password,:createtime,:enabled,:authorize)"; // 添加新用户是自动取得时间 // user.setCreatetime(DateUtil.getCurDate(null)); excute(sql, user); msg.setFlag(true); msg.setText("ok"); } catch (Exception e) { logger.error("出错的原因。。。" + e.getMessage()); } return msg; } /** * 修改用户 */ @Override public MsgBean updateUser(User user) { MsgBean msg = new MsgBean(); try { String sql = " update sys_user set spassword=:password,tcreatetime=:createtime,cisenabled=:enabled,cauthorize=:authorize where suser=:username"; excute(sql, user); msg.setFlag(true); msg.setText("ok"); } catch (Exception e) { logger.error("出错的原因。。。" + e.getMessage()); } return msg; } /** * 删除用户 */ @Override public MsgBean deleteUser(String username) { MsgBean msg = new MsgBean(); try { String sql = "delete from sys_user where suser =‘:username‘"; if (username != null && username.length() != 0) { sql = sql.replace(":username", username); }else { msg.setFlag(false); msg.setText("未知原因,删除失败"); return msg; } excute(sql, null); msg.setFlag(true); msg.setText("ok"); } catch (Exception e) { logger.error("出错的原因。。。" + e.getMessage()); } return msg; }
}
/** * 用户控制层 */ @Controller public class UserController { private static final Log logger = LogFactory.getLog(UserController.class); @Autowired private IUserService userService; /** * 用户查询 * * @param request * @param response * @return */ @ResponseBody @RequestMapping("/queryuser") public Object queryUserList(HttpServletRequest request, HttpServletResponse response) { User user = new User(); // 模糊查询传来的值 // String username = request.getParameter("username"); // // 判断字符串是否为空 // if (StringUtil.isBlank(username)) { // // 若为空替换为空字符串 // username = ""; // } // user.setUsername(username); Object obj = userService.queryUser(null, user); return obj; } /** * 用户添加 * * @param user * @return */ @ResponseBody @RequestMapping("/adduser") public MsgBean addUser(User user) { MsgBean msg = null; try { msg = userService.addUser(user); } catch (Exception e) { logger.error("出错的原因 :" + e.getMessage()); } return msg; } /** * 用户修改 * * @param user * @return */ @ResponseBody @RequestMapping("/updateuser") public MsgBean updateUser(User user) { MsgBean msg = null; try { msg = userService.updateUser(user); } catch (Exception e) { logger.error("出错的原因 :" + e.getMessage()); } return msg; } /** * 用户删除 * * @param username * @return */ @ResponseBody @RequestMapping("/deleteuser") public MsgBean deleteUser(@RequestParam("username") String username) { MsgBean msg = null; try { msg = userService.deleteUser(username); } catch (Exception e) { logger.error("出错的原因 :" + e.getMessage()); } return msg; } }