SpringJDBC+SpringMVC+MySQL的简单入门级用法


前面写完了SpringMVC实现文件上传,今天来说说SpringJDBC吧,SpringJDBC Template是一个可以帮助咱们开发者解决许多连接的细节化操作的类,开发者只需要考虑如何编写sql语句,剩下的工作去交给JDBC Template,可以完成CRUD操作,接下来来看看吧。

第一步,自然需要配置一下SpringJDBC了,这是一个外源包,需要自己加入,这里我们依然采用Maven来进行配置

         
	 	
         	org.springframework
    		spring-jdbc
    		4.2.1.RELEASE         
     	         
    	             
     		mysql             
     		mysql-connector-java             
     		5.0.5         
   		 

这里写好Maven配置后就Maven会帮助大家自行下载好的,不懂怎么配置的,请自己看下我前面用sts建立Maven工程的方法,这里下面的是配置mysql驱动的,推荐一下MavenRepository,这个网站有Maven下各种jar包的中央库,里面有配置,大家自行查看。下载好jar包自动导入后,自然是要给spring中注册这个类啦,注册的配置文件如下

	
  		
  		
  		useUnicode=true&characterEncoding=utf-8">
  		
 	

	
  		
 	

这里的dataSource中指明了连接你的数据库的各种信息,数据库驱动,登录名,密码,localhost:最后面需要指定你的数据库,在spring后还可以指定编码方式jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=utf-8,中间用";"隔开,这里一定注意。这里的spring是你想要使用的目标数据库。这样就配置好啦,来看看使用吧。

第二部,在DAO层使用JDBC Template,代码如下

@Repository("jdbcDataDAO")
public class JdbcDataDAOImpl implements JdbcDataDAO{
	@Resource
	private JdbcTemplate jdbcTemplate; 
	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}

	@Override
	public void deleteUser(String name) {
		// TODO Auto-generated method stub
		String sql="delete from user where name = ?";
		Object[] params = {name};
		int[] types = {Types.VARCHAR};
		jdbcTemplate.update(sql,params,types);
	}

	@Override
	public void addUser(User user) {
		// TODO Auto-generated method stub
		String sql = "insert into user(name,age,lengOfDick,sex) "
					+ "values (?,?,?,?)";
		Object[] params = {user.getName(),user.getAge(),
				user.getLengthOfDick(),user.getSex()};
		int[] types = {Types.VARCHAR,Types.VARCHAR,Types.VARCHAR,Types.VARCHAR};
		jdbcTemplate.update(sql, params, types);
		}
	//写这个来测试一下查询返回一个List列表
        public List QueryAllUser(){
        String sql = "select * from user";
        return jdbcTemplate.query(sql, new RowMapperResultSetExtractor(new UserMapper()));
        }
	@Override
	public void modifyUser(User user) {
		// TODO Auto-generated method stub
		String sql = "update user set  age = ?, lengOfDick = ?, sex = ? where name = ?";
		Object[] params = {user.getAge(), user.getLengthOfDick(), user.getSex(), user.getName()};
		int[] types = {Types.VARCHAR,Types.VARCHAR,Types.VARCHAR,Types.VARCHAR};
		jdbcTemplate.update(sql, params, types);
	}

	@Override
	public User queryForUser(String name) {
		// TODO Auto-generated method stub
		String sql = "select * from user where name = ?";
		Object[] params = new Object[]{name};
		int[] types =  new int[]{Types.VARCHAR};
		return  jdbcTemplate.queryForObject(sql, params, types, new UserMapper());
	}
	protected class UserMapper implements RowMapper,Serializable{

		@Override
		public Object mapRow(ResultSet arg0, int arg1) throws SQLException {
			// TODO Auto-generated method stub
			User user = new User();
			user.setUser_id(arg0.getInt("user_id"));
			user.setName(arg0.getString("name"));
			user.setAge(arg0.getString("age"));
			user.setLengthOfDick(arg0.getString("lengOfDick"));
			user.setSex(arg0.getString("sex"));
			return user;
		}
		
	}
	
}
这里可以处理各种类型的请求,增删改查,由于数据是我们收到之后才做处理,所以自然要使用动态sql,也就是使用?或者显式占位符来写,这里我都使用?来处理,大部分大家应该都可以看明白,有一个地方,在查询某一个特定的user时,我又传入了一个自己写的rowMapper类对象,如果这里不这样来写的话,你还想要返回一个对象的话,后台会报一个错误,说是(用中文表述)你想要一列,然而你查出了四列信息,查了百度后,需要加入一个重写RowMapper方法的类,这里大家参考

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




Insert title here


你想要查询的用户

你想要删除的用户

请添加一个新用户





请更改一个账户





这里是前台提交的代码。有一个自己写好的entity类User,所以如果完整提交User的各个成员变量,SPring是可以自动封装的。

@Controller
public class JsonTestController {
	@Resource
	private JdbcDataDAOImpl jdbcDataDAO;
	public void setJdbcDataDAO(JdbcDataDAOImpl jdbcDataDAO) {
		this.jdbcDataDAO = jdbcDataDAO;
	}
	
	/*
	 * @responsebody返回json测试
	 */
	@RequestMapping(value="/queryUser")
	public String returnJson(@RequestParam("name")String name) throws JsonGenerationException, JsonMappingException, IOException{
		FileOutputStream out = new FileOutputStream(new File("F:"+File.separator+"json.json"));
		ObjectMapper objectMapper = new ObjectMapper();
		objectMapper.writeValue(out,jdbcDataDAO.queryForUser(name));
		System.out.println("success");
                List users = jdbcDataDAO.QueryAllUser();
                Iterator it = users.iterator();
                 while(it.hasNext()){
                       User user = (User)it.next();
                       System.out.println(user.getName());
        }
                return "JsonOutput";
	}
	@RequestMapping("/addUser")
	public String addUser(User user){
		jdbcDataDAO.addUser(user);
		System.out.println(user.getName());
		return "JsonOutput";
	}
	@RequestMapping("/deleteUser")
	public String deleteUser(@RequestParam("name")String name){
		jdbcDataDAO.deleteUser(name);
		return "JsonOutput";
	}
	@RequestMapping("/modifyUser")
	public String modifyUser(User user){
		jdbcDataDAO.modifyUser(user);
		return "JsonOutput";
	}
}

这里是控制器的代码部分,非常简单。在查询时自己没事写了个转化为Json数据做个练习,为之后使用ajax铺垫一下这里。

在转化JSon之后写了一个测试查询返回List的

public class User implements Serializable{
	
	private int user_id;
	private String name;
	private String age;
	private String lengthOfDick;
	private String sex;
        省略set..get..方法
}
那么就写好了,大家在测试过程中可能会发生数据的确插入进去,但是却无法正常显示中文的问题,这里的话,可能为以下两种情形,第一种是穿给后台的数据已经乱码,这个问题好解决,在web.xml中加入一个编码过滤器,配置如下


	      
        encodingFilter  
        org.springframework.web.filter.CharacterEncodingFilter  
          
            encoding  
            UTF-8  
          
          
            forceEncoding  
            true  
          
    
第二个问题可能发生在你的mysql安装时选择的编码格式不对,进入mysql数据库后,输入status;然后查看自己的编码格式,我这里全都一致使用utf8,如果都没问题,只是在mysql的命令行中无法看中文,这个问题请参照我前面的文章

很多同学问我要源码,可是真的没有了,删掉了,如果说SpringMvc的话,有一个之前写的项目,可以给大家借鉴,https://github.com/DrJian/news



你可能感兴趣的:(Spring,Web)