java新手开发网页(MVC+接收数据自定义转换器+整合mybatis)

最后的效果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

开发前准备

1、eclipse
2、jdk1.8
3、tomcat 9.0
4、mysql
5、一些java包
在这里插入图片描述

准备数据库

在这里插入图片描述

开始编写代码

1、在eclipse里面new一个Dynamic Web Project(创建时记得勾选添加web.xml)

在这里插入图片描述

2、编写web.xml

在这里插入图片描述
在web里面添加以下代码

  <servlet>
	<servlet-name>springmvc</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet
	</servlet-class>
	<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>springmvc</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>
<filter>
	<filter-name>characterEncodingFilter</filter-name>
	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
	<init-param>
		<param-name>forceEncoding</param-name>
		<param-value>true</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>characterEncodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

3、WEB-INF添加springmvc-servlet.xml文件

<?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:mvc="http://www.springframework.org/schema/mvc"
       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.xsd			    
       	http://www.springframework.org/schema/mvc 
       	http://www.springframework.org/schema/mvc/spring-mvc.xsd  ">     
 <!--  自动生成com.controlle、com.service、com.dao里面注解的bean -->          
<context:component-scan base-package="com.controller" />
<context:component-scan base-package="com.service" />
<context:component-scan base-package="com.dao" />

 <!--  UserController.java 里面的 @RequestParam("goods") GoodsModel gm就会调用下面的转换  string转GoodsModel就刚好对应着GoodsConverter 里面的Converter<String, GoodsModel> -->  
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
	<list>
		<bean class="com.formatter.GoodsConverter"/>
	</list>
</property>
</bean>
<mvc:annotation-driven conversion-service="conversionService"/>

 <!--  该bean是配置http访问的网址形式 -->   
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
      <property name="prefix" value="/WEB-INF/jsp/"/>
      <property name="suffix" value=".jsp"/>
</bean>
</beans> 

4、在src中创建以下包和bean工程application.xml

在这里插入图片描述

5、编写com.pojo里面的内容(该包是和数据库相对应)

在这里插入图片描述
User对应数据库的table user;GoodsModel对应着数据库的table GoodsModel;user_supplement是补充填写table user表里面的hobby 和 friends字段的,因为在user.java中,这两个字段是字符串数组,而在mysql中是字符串,所以需要转换下格式。
编写user.java

package com.pojo;
import java.util.Arrays;
public class User {
	private String userName;
	private String[] hobby;
	private String[] friends;
	private String carrer;
	private String houseRegister;
	private String remark;
	private GoodsModel userData;
}

以下的pojo文件都省了set和get方法。
编写其他两个class

package com.pojo;
public class GoodsModel {
	private String goodsname;
	private double goodsprice;
	private int goodsnumber;
}
package com.pojo;
public class user_supplement {
	private String userName;
	private String supplement;
}

编写Dao层

pojo层负责对应数据库,Dao层负责联络数据库,给数据库做一些动作,接着编写Dao层
在这里插入图片描述
goodsDao负责提供操作数据库goodsModel的接口
UserDao负责提供操作数据库User的接口

package com.dao;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import com.pojo.User;
//自动生成bean的注解
@Repository("goodsDao")
//该注解通过application里面的扫描,然后连接到com.mybatis里面的UserMapper.xml文件
@Mapper
public interface goodsDao {
	public int addgoods(User user);
}
package com.dao;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import com.pojo.*;
//自动生成bean的注解
@Repository("userDao")
//该注解通过application里面的扫描,然后连接到com.mybatis里面的goodsMapper.xml文件
@Mapper
public interface UserDao {
	public int addUser(User user);
	public int updateUser_hobby(user_supplement sup);
	public int updateUser_friends(user_supplement sup);
}

编写service层

service层是DAO层的上一层,可以调用DAO层里面的方法。
在这里插入图片描述
接着编写上面的.java文件

package com.service;
import java.util.ArrayList;
import com.pojo.User;
public interface UserService {
	boolean addUser(User u);
	ArrayList<User> getUsers();
}
package com.service;
import java.util.ArrayList;
import org.springframework.stereotype.Service;
import com.pojo.User;
//自动生成bean的注解
@Service
public class UserServiceImpl implements UserService {
	private static ArrayList<User> users=new ArrayList<User> ();
	@Override
	public boolean addUser(User u) {
		// TODO Auto-generated method stub
		users.add(u);
		return true;
	}
	@Override
	public ArrayList<User> getUsers() {
		// TODO Auto-generated method stub
		return users;
	}
}

接着搭配bean工厂和数据库xml文件

在这里插入图片描述

<?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:util="http://www.springframework.org/schema/util"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       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.xsd
       					   http://www.springframework.org/schema/aop 
       					   http://www.springframework.org/schema/aop/spring-aop.xsd
       					   http://www.springframework.org/schema/util 
       					   http://www.springframework.org/schema/util/spring-util.xsd 
       					   http://www.springframework.org/schema/tx
       					   http://www.springframework.org/schema/tx/spring-tx.xsd">  
 <!--  自动生成com.dao里面注解的bean -->                 
<context:component-scan base-package="com.dao" />

 <!--  配置数据库 -->         
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
	<property name= "driverClassName" value="com.mysql.cj.jdbc.Driver"/>
 	<property name="url" value="jdbc:mysql://localhost:3306/springtest?serverTimezone=America/New_York"/>
	<property name = "username"  value="root"/>
	<property name= "password" value ="1234567" />
</bean>
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource"></property>
</bean>
<tx:annotation-driven transaction-manager="txManager" />

<!--  使数据库连接数据库语句 -->  
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource"/>
	<property name="configLocation" value="classpath:com/mybatis/mybatis-config.xml" />
</bean>

<!--  使dao层数据库语句 -->  
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<property name="basePackage" value="com.dao"/>
	<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>  
</beans> 

下面搭建数据库语句的xml
在这里插入图片描述
mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
  <configuration>
  		<mappers>
  			<mapper resource="com/mybatis/UserMapper.xml"/>
  			<mapper resource="com/mybatis/goodsMapper.xml"/>
  		</mappers>
  </configuration>

UserMapper.xml负责User表的语句

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  <mapper namespace="com.dao.UserDao">
  		<insert id="addUser" parameterType="com.pojo.User">
  			insert into user (userName,hobby,friends,carrer,houseRegister,remark) values (#{userName},null,null,#{carrer},#{houseRegister},#{remark})
  			ON DUPLICATE KEY UPDATE userName=#{userName}
  		</insert>
  		<update id="updateUser_hobby" parameterType="com.pojo.user_supplement">
  			update user set hobby=#{supplement} where userName=#{userName}
  		</update>
  		<update id="updateUser_friends" parameterType="com.pojo.user_supplement">
  			update user set friends=#{supplement} where userName=#{userName}
  		</update>
  </mapper>

goodsMapper.xml负责goodsmodel表的语句

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  <mapper namespace="com.dao.goodsDao">
  		<insert id="addgoods" parameterType="com.pojo.User">
  			insert into goodsmodel (goods_userName,goodsname,goodsprice,goodsnumber) 
  			select #{userName},#{userData.goodsname},#{userData.goodsprice},#{userData.goodsnumber}
  			 where  exists (select * from springtest.user where userName =#{userName} );
  		</insert>
  </mapper>

编写controller层

controller是service层的上一层,负责调用service的方法,接收http的访问,调用bean工厂等等的功能,bean工厂可以链接数据库和调用mapper.xml那么xml文件。
在这里插入图片描述

package com.controller;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.dao.UserDao;
import com.dao.goodsDao;
import com.pojo.GoodsModel;
import com.pojo.User;
import com.pojo.user_supplement;
import com.service.UserService;

@Controller
@RequestMapping("/user")
public class UserController {
//加载bean工厂
	ApplicationContext appCon=new ClassPathXmlApplicationContext("applicationContext.xml");
	private UserDao userDao=(UserDao) appCon.getBean("userDao");
	private goodsDao goodsDao=(goodsDao) appCon.getBean("goodsDao");
	//开启日记
private static final Log logger =(Log) LogFactory.getLog(UserController.class);
	//创建一个user_supplement 类型,该类型实现字符串数组变为字符串
	private user_supplement sup=new user_supplement();
	@Autowired
	private UserService userService;
	
	@RequestMapping(value="/input")
	public String inputUser(Model model) {
		HashMap<String,String> hobbys=new HashMap<String ,String>();
		hobbys.put("篮球","篮球");
		hobbys.put("唱","唱");
		hobbys.put("跳","跳");
		hobbys.put("rap","rap");	
		model.addAttribute("user", new User());
		model.addAttribute("hobbys", hobbys);
		model.addAttribute("carrers", new String[] {"教师","学生","coding搬运工","IT民工","其他"});
		model.addAttribute("houseRegisters", new String[] {"北京","上海","广州","深圳","其他"});
		//return 会在浏览器显示userAdd.jsp
		return "userAdd";
	}
	@RequestMapping(value="/list")
	public String listUsers(@ModelAttribute User user,@RequestParam("goods") GoodsModel gm, Model model) {
		user.setUserData(gm);
		userService.addUser(user);
		userDao.addUser(user);
		sup.setUserName(user.getUserName());
		sup.setSupplement(Arrays.toString(user.getHobby()));
		userDao.updateUser_hobby(sup);
		sup.setSupplement(Arrays.toString(user.getFriends()));
		userDao.updateUser_friends(sup);
		goodsDao.addgoods(user);
		List<User> users=userService.getUsers();
		model.addAttribute("users", users);
		model.addAttribute("goods", gm);
		return "userList";
	}
}

编写formatter层

该层可以接应UserController Class 里面的@RequestParam(“goods”) GoodsModel gm ,使表现层传回来的字符串goods转换为GoodsModel类型
在这里插入图片描述

package com.formatter;
import org.springframework.core.convert.converter.Converter;
import com.pojo.GoodsModel;
public class GoodsConverter implements Converter<String, GoodsModel> {
	@Override
	public GoodsModel convert(String source) {
		// TODO Auto-generated method stub
		String s[]=source.split(",");
		GoodsModel goods=new GoodsModel();
		goods.setGoodsname(s[0]);
		goods.setGoodsprice(Double.parseDouble(s[1]));
		goods.setGoodsnumber(Integer.parseInt(s[2]));
		return goods;
	}

}

最后编写表现层,在浏览器上展示

在WEB-INF中创建一个jsp包
在这里插入图片描述
userAdd负责让客户输入相关数据
userList负责显示出客户已经输入的数据

userAdd.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form:form modelAttribute="user" method="post" action=" ${pageContext.request.contextPath }/user/list">
	<fieldset>
		<legend>添加一个用户</legend>
		<p>
			<label>用户名:</label>
			<form:input path="userName"/>
		</p>
		<p>
			<label>爱好:</label>
			<form:checkboxes items="${hobbys }" path="hobby"/>
		</p>
		<p>
			<label>朋友:</label>
			<form:checkbox path="friends" value="张三"/>张三
			<form:checkbox path="friends" value="李四"/>李四
			<form:checkbox path="friends" value="王五"/>王五
			<form:checkbox path="friends" value="赵六"/>赵六
		</p>
		<p>
			<label>职业:</label>
			<form:select path="carrer">
				<option/>请选择职业
				<form:options items="${carrers }"/>
			</form:select>
		</p>
		<p>
			<label>户籍:</label>
			<form:select path="houseRegister">
				<option/>请选择户籍
				<form:options items="${houseRegisters }"/>
			</form:select>
		</p>
		<p>
			<label>个人描述:</label>
			<form:textarea path="remark" row="5"/>
		</p>
		goods:<input type="text" name="goods"/>(一定要输入apple,10.58,200)这样的格式 <br>
		<p  id="buttons">
			<input id="reset" type="reset">
			<input id="submit" type="submit" value="添加">
		</p>
	</fieldset>
</form:form>
</body>
</html>

userList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib  uri="http://java.sun.com/jsp/jstl/core"  prefix="c" %> 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>用户列表</h1>
	<a href="${pageContext.request.contextPath }/user/input">继续添加</a>
	<table>
		<tr>
			<th>用户名</th>
			<th>兴趣爱好</th>
			<th>朋友</th>
			<th>职业</th>
			<th>户籍</th>
			<th>个人描述</th>
			<th>goods</th>
		</tr>
		<c:forEach items="${users }" var="user">
			<tr>
				<td>${user.userName }</td>>
				<td>
					<c:forEach items="${user.hobby }" var="hobby">
						${hobby }&nbsp;
					</c:forEach>
				</td>
				<td>
					<c:forEach items="${user.friends }" var="friend">
						${friend }&nbsp;
					</c:forEach>
				</td>
				<td>
					${user.carrer }
				</td>
				<td>
					${user.houseRegister }
				</td>
				<td>
					${user.remark }
				</td>
				<td>
					${user.userData.goodsname }&nbsp ${user.userData.goodsprice }&nbsp ${user.userData.goodsnumber }				
				</td>
			</tr>
		</c:forEach>
	</table>
</body>
</html>

最后运行MVC项目

右击mybatisMVC_third
在Run As 里面点击Run on server,选择tomcat 9.0 然后点击finish
等待项目启动成功
在浏览器输入地址
http://localhost:8080/mybatisMVC_third/user/input
下图就为整个小项目的效果了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值