发表于: 2017-10-22 18:47:08
1 713
今天完成的事情:
今天着手开始搭建SSM框架:
首先从自己最熟悉的spring和mybatis整合开始,这部分内容是任务一的知识,就当复习一遍。
model层:
public class User {
private Integer id;
private String name;
private String qq;
private String stu_type;
private Integer entrance;
private String graduated;
private Integer online_id;
private String link;
private String wish;
private String tutor;
private String where_get;
setter和getter,还有tostring方法没有贴上来,都是工具自动生成的。
接下来是dao:
@Repository
public interface UserDao {
public List<User> queryAllUser();
public User queryUserById(Integer id);
public boolean update(@Param("id")Integer id,@Param("name")String name,@Param("qq")String qq,
@Param("stu_type")String stu_type, @Param("entrance")Integer entrance,@Param("graduated")String graduated,
@Param("online_id")Integer online_id, @Param("link")String link,@Param("wish")String wish,
@Param("tutor")String tutor, @Param("where_get")String where_get);
public boolean add(@Param("name")String name,@Param("qq")String qq,@Param("stu_type")String stu_type,
@Param("entrance")Integer entrance,@Param("graduated")String graduated,@Param("online_id")Integer online_id,
@Param("link")String link,@Param("wish")String wish,@Param("tutor")String tutor,
@Param("where_get")String where_get);
public boolean delete(Integer id);
}
这次加上了@param,今天学的内容,就当是试验一下。
@param作用:就是参数的解释,我当作就是为参数写别名。真正用法现在还没有用到。
dao的实现mapper:
<select id="queryAllUser" resultType="com.mmy.model.User">
SELECT id,name,qq,stu_type,entrance,graduated,online_id,link,wish,tutor,where_get FROM user
</select>
<select id="queryUserById" parameterType="int" resultType="com.mmy.model.User">
SELECT id,name,qq,stu_type,entrance,graduated,online_id,link,wish,tutor,where_get FROM user WHERE id= #{id}
</select>
<insert id="add" keyProperty="id" useGeneratedKeys="false" >
INSERT INTO user (name,qq,stu_type,entrance,graduated,online_id,link,wish,tutor,where_get)
VALUES (#{name},#{qq},#{stu_type},#{entrance},#{graduated},#{online_id},#{link},#{wish},#{tutor},#{where_get})
</insert>
<update id="update" keyProperty="id" useGeneratedKeys="false">
update user set name=#{name},qq=#{qq},stu_type=#{stu_type},entrance=#{entrance},graduated=#{graduated},
online_id=#{online_id},link=#{link},wish=#{wish},tutor=#{tutor},where_get=#{where_get}
where id=#{id}
</update>
<delete id="delete" parameterType="com.mmy.model.User">
DELETE FROM user WHERE id=#{id}
</delete>
一些基本的sql语句。
接着进行mybatis和spring整合,xml配置文件:
<!-- 扫描包,使注解生效 -->
<context:component-scan base-package="com.mmy.*">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 配置jdbc.properties文件 -->
<cotext:property-placeholder location="classpath:jdbc.properties"/><!--配置数据库连接,这次用了一个c3p0连接池-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="maxPoolSize" value="30"/>
<property name="minPoolSize" value="10"/>
<property name="autoCommitOnClose" value="false"/>
<property name="checkoutTimeout" value="1000"/>
<property name="acquireRetryAttempts" value="2"/>
</bean><!-- spring和mybatis的整合,dao注册为一个bean,可以通过dao层的实现,直接对数据库进行增删改查的操作 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="typeAliasesPackage" value="com.mmy.model"/>
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:com/mmy/dao/*.xml"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.mmy.dao"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
这里翻车了,刚开始我是写了两个spring配置文件,分别对应dao和service,结果测试不多。
让师兄帮我分析了一下,问题出在这里:
context:component-scan base-package="com.mmy.*">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
遇到了重复扫描包,配置注解的情况。就把两个配置文件合并在一起,一起扫描,解决了问题。
接下来就是到层的测试:
测试类:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring/spring-dao.xml"})
public class UserDaoTest{
private User user;
@Resource
private UserDao userDao;
@Test
public void queryAllUser() throws Exception {
List<User> list=userDao.queryAllUser();
for(User user:list){
System.out.println(user);
}
}
junit单元测试,测试结果:
通过。
现在做任务实现的功能比较简单,我还不能很好的分的开service和dao,这部分内容还是得继续学习。
service层以及实现层:
@Service(value = "userService")
public class UserServiceImpl implements UserService{
private UserDao userDao;
public UserDao getUserDao(){
return userDao;
}
@Autowired
public void setUserDao (UserDao userDao){
this.userDao=userDao;
}
public User queryUserById(Integer id) {
return userDao.queryUserById(id);
}
public List<User> queryAllUser() {
return userDao.queryAllUser();
}
public boolean add(User user) {
return userDao.add(user);
}
public boolean delete(Integer id) {
return userDao.delete(id);
}
public boolean update(User user) {
return userDao.update(user);
public interface UserService {
public List<User> queryAllUser();
public User queryUserById(Integer id);
public boolean update(User user);
public boolean add(User user);
public boolean delete(Integer id);
}
继续junit单元测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spring/spring-dao.xml"})
public class UserServiceImplTest {
private User user;
@Resource(name = "userService")
private UserService userService;
@Test
public void queryAllUser() throws Exception {
List<User> users=userService.queryAllUser();
for(User user:users){
System.out.println(user);
}
}
测试结果:
通过。
上面的内容基本上就是对任务一的一个总结与复习,没有遇到特别困难的问题。
接下来是这几天学的内容:
controller层:
@Controller
@RequestMapping("userController")
public class UserController {
@Autowired
private UserService userService:
//查找单个
@RequestMapping(value="/queryUserById/{id}",method=RequestMethod.GET)
public String queryUserById(@PathVariable("id") Integer id,HttpServletRequest request){
User user = userService.queryUserById(id);
System.out.println("查找UserBy ID");
request.setAttribute("user", user);
return "showUserById";
}
//查找所有
@RequestMapping(value="/queryAllUser",method=RequestMethod.GET)
public String queryAllUser(HttpServletRequest request){
List<User> userlist = userService.queryAllUser();
System.out.println("查找所有");
request.setAttribute("userlist", userlist);
return "showUsers";
}
//添加
@RequestMapping(value="/add",method=RequestMethod.PUT)
public String add(User user){
if(user.getId()!=null){
user.setId(null);
}
System.out.println("添加方法 user :"+user);
Boolean bool = userService.add(user);
System.out.println("是否添加成功: "+bool);
return "redirect:/userController/showAllUser";
}
//删除
@RequestMapping(value="/delete/{id}",method=RequestMethod.DELETE)
public String delUserById(@PathVariable("id") Integer id){
Boolean bool = userService.delete(id);
System.out.println("删除方法:"+bool);
return "redirect:/userController/showAllUser";
}
//跳转到修改页
@RequestMapping(value="/showAllToUpdate/{id}",method=RequestMethod.GET)
public String showUserByIdToUpdate(@PathVariable("id") Integer id,Map<String,User> map){
User user = userService.queryUserById(id);
System.out.println("跳转到修改页面"+id);
map.put("user", user);
return "update";
}
//修改
@RequestMapping(value="/updateUser",method=RequestMethod.POST)
public String updateUser(User user){
Boolean bool = userService.update(user);
System.out.println("修改方法:"+user+" 是否成功:"+bool );
return "redirect:/userController/showAllUser";
}
映射数据库增删改查操作到客户端页面。
spirng-web.xml主要配置:
<context:annotation-config/>
<!-- 扫描包,使注解生效 -->
<context:component-scan base-package="com.mmy.controller">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<mvc:default-servlet-handler />
<mvc:annotation-driven />
<!-- 配置viewResoler -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
web.xmlbaba主要配置:
<!-- spring的配置文件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-dao.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- spring mvc核心:分发servlet -->
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- spring mvc的配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-web.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
配置控制器,以及spring配置文件。
然后自己写了两个特别简单的页面,但是最后失败了。404,自己还在排查当中。
还有这几天在准备小课堂。打算讲一讲索引,所以这几天在准备这方面的内容。
明日计划的事情:
继续搭框架,准备小课堂。
遇到的困难:
本来以为并不难,结果自己还是太天真了,动起手来之后还是有许多不明白的地方,自己基础太薄弱了,感觉任务二要好久才能完成了,对自己后面几天的进度不太乐观,主要是找网上的资料,对着搭建不是这里出问题,就是那里配置错误。自己看书的话,太慢,但是坑还是要自己踩,这一段时间还是打基础吧。
收获:
spring注解重复扫描,可以把两个配置文件整合到一个里面。
任务开始时间:2017/10/18
预计完成时间:2017/10/25
延期:无
禅道:http://task.ptteng.com/zentao/project-task.html
评论