基于SSM框架实现数据库的基本功能(一)

来源:互联网 发布:淘宝跑腿办事 编辑:程序博客网 时间:2024/06/05 02:36

基于SSM框架实现数据库的基本功能(一)

  • SSM
  • 数据库基本功能实现实现模式——工厂模式
  • 数据库基本操作功能——增、删

1、SSM框架

1.1、SpringSpring 是一个开源框架, Spring 是于 2003  年兴起的一个轻量级的 Java  开发框架,由 Rod Johnson  在其著作 Expert One-On-One J2EE Development and Design 中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。 Spring 使用基本的 JavaBean 来完成以前只可能由 EJB 完成的事情。然而, Spring 的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何 Java 应用都可以从 Spring 中受益。 简单来说, Spring 是一个轻量级的控制反转( IoC )和面向切面( AOP )的容器框架。

1.2、SpringMVC

    Spring MVC 属于 SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 里面。 Spring MVC  分离了 控制器 、模型 对象 、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

1.3、MyBatis

    MyBatis  本是 apache 的一个开源项目 iBatis , 2010 年这个项目由 apache software foundation  迁移到了 google code ,并且改名为 MyBatis  。 MyBatis 是一个基于 Java 的 持久层 框架。 iBATIS 提供的 持久层 框架包括 SQL Maps 和 Data Access Objects ( DAO ) MyBatis  消除了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。 MyBatis  使用简单的  XML 或注解用于配置和原始映射,将接口和  Java  的 POJOs ( Plain Old Java Objects ,普通的  Java 对象)映射成数据库中的记录。  [参考博客](http://www.cnblogs.com/fangjian0423/p/springMVC-introduction.html)

2、数据库基本功能实现实现模式——工厂模式

web动态项目代码目录
1.1 工厂模式的定义
简单工厂模式:定义一个创建对象的类,由这个类来封装实例化的行为。
工厂模式:定义了一个创建对象的抽象方法由子类决定要实例化的类,工厂模式将对象实例化推迟到子类。
抽象工厂模式:定义了一个接口用于创建相关或依赖关系的对象族,而无需明确指定具体类。
1.2 DAO工厂模式具体实例代码

    1.2.1 整体分析        整个工厂模式共有5层,分别是entity(实体层)、service(服务层)、dao、controller(控制层)、common(公共接口层)。    1.2.2 具体代码分析        common层,定义一个接口IBaseDao.java,声明数据库增删改查等基本操作的方法名,使用泛型<K,V>可以使代码有更好的扩展性,继承这个接口的类可以可以自行映射数据类型。
public interface IBaseDao<K,V> {    public boolean doInsert(V vo) throws Exception;    public boolean doUpdate(V vo) throws Exception;    /**     * 执行删除数据操作     */    public boolean doDelete(K id) throws Exception;    /**     * 执行对象查找操作     */    public V findById(K id) throws Exception;    /**     * 执行查询所有数据操作     *      * @return 返回所有对象的List数据集合,List长度为0,表示无数据     * @throws Exception     *             出现异常,交由调用处处理     */    public List<V> findAll() throws Exception;    /**     * 执行模糊查询,并按照分页返回     * @param column    查询条件的列名     * @param keyWord   进行模糊查询的关键词,如果关键词为空,则返回所有数据     * @param currentPage  当前分页     * @param pageSize  分页的每页数据元素个数     * @return  返回多个对象的List数据集合,List长度为0,表示无数据     * @throws Exception  出现异常,交由调用处处理     */    public List<V> findAllPaging(String column, String keyWord,            int currentPage, int pageSize) throws Exception;    /**     * 根据条件,查询返回记录     * @param v  待查询的对象,封装了查询条件(为空的部分不纳入查询条件内)     * @return  返回所有满足条件的记录     * @throws Exception  出现异常,交由调用处处理     */    public List<V> findByCondition(Map<String,Object> condition)throws Exception;     /**     * 获取模糊查询数据的记录条数     * @param column  查询条件的列名     * @param keyWord  进行模糊查询的关键词,如果关键词为空,则查询所有数据     * @return  返回查询到数据记录的条数,如果无数据,返回0     * @throws Exception  出现异常,交由调用处处理     */    public int getAllCount(String column,String keyWord) throws Exception;}
        dao层和service层,dao实现类实现了dao接口,也就是实现了接口中定义的所有方法,而service层则根据controller层传递的信息执行具体的业务,然后通过调用dao中的具体方法。而在此处,没有在dao层实现具体类,而是放在service层,原因是在 UserMapper.xml中配置了对数据库的具体操作。代码如下:
IUserDao.javapublic interface IUserDao extends IBaseDao<String, User> {}UserService.javapublic class UserService {    @Resource    private IUserDao userDao;}
        controller层和entity层,controller层则是根据前端获取的请求决定做什么,确定由谁来执行,并将请求发送给service层,简单来说,entity层一个类对应一个实体,如同上述代码示例的实体就是User,User.java就是user实体所拥有的一些属性。

数据库基本操作功能——增、删

3.1 获取前端页面具体请求    前端代码:
<form action="addUser" method="post">    <table align="center">    <thead align="center"><tr><td colspan="3"><h2>用户添加</h2></td></tr></thead>        <tr>            <td>用户名:</td>            <td colspan="2"><input type="text" name="user_name"/></td>        </tr>        <tr>            <td>密码:</td>            <td colspan="2"><input type="password" name="password"/></td>        </tr>        <tr>            <td>真实姓名:</td>            <td colspan="2"><input type="text" name="real_name"/></td>        </tr>        <tr>            <td></td>            <td><input type="submit" value="保存">&nbsp;&nbsp;&nbsp;&nbsp;<input type="reset" value="重置"></td>            <td></td>        </tr>    </table>    </form>
通过post方法将数据传递到controller层,controller层获取到添加请求后,通过HttpServletRequest类获取用户信息,通过service执行具体方法保存到数据库中,请求传递代码依次如下:
1、controller.java@RequestMapping("addUser")    public String addUser(ModelMap map,HttpServletRequest req) {        User user = new User();        user.setUser_name(req.getParameter("user_name"));        user.setPassword(req.getParameter("password"));        user.setReal_name(req.getParameter("real_name"));        user.setCreate_time(new Date());        user.setIs_valid(true);        try {            uService.addNewUser(user);            List<User> ul = uService.findAllUser();            map.put("users", ul);        } catch (Exception e) {            System.out.println("数据库操作异常!");            }        return "view/user/user_list";    }2、UserService.javapublic boolean addNewUser(User user) throws Exception{        boolean flag = false;        if(userDao.doInsert(user))        {            flag = true;        }        return flag;    }3、IBaseDao.java/**     * 执行数据的插入操作     *      * @param vo 要插入的数据对象     * @return 插入成功返回true,如果存在同样的记录或插入失败,返回false     * @throws Exception 出现异常,交由调用处处理     */public boolean doInsert(V vo) throws Exception;//接下来是UserMapper.xml中配置的信息(也就是上述提到的不必在dao层写具体实现方法的原因)    <!--对于自增长的对象,如果不设定主键值,那么就使用如下的属性配置 useGeneratedKeys="true" keyProperty="id" -->    <insert id="doInsert" parameterType="User"  useGeneratedKeys="true" keyProperty="user_id">        insert into t_user(user_name,password,real_name,is_valid,create_time)        values(#{user_name},#{password},#{real_name},#{is_valid},#{create_time})    </insert>
    数据库的删除操作和上述类似,下面只写关键代码
<a href="doDelete?user_name=${user.user_name }" onclick='return confirm("确定要删除吗?")'>删除</a>//获得要删除的User的user_name执行删除操//以下是配置信息<delete id="doDelete" parameterType="String">        delete from t_user where user_name = #{user_name}    </delete>
以上就是本次实战的总结。
13 3
原创粉丝点击