发表于: 2017-10-22 18:47:08

1 712


今天完成的事情:
今天着手开始搭建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



返回列表 返回列表
评论

    分享到