spring+jdbc

针对不同的DAO处理,Spring分别提供了各自的封装。

处理的模式是将DAO类进行了一个扩展,必须在编写DAO实现类时继承一个XxxxDaoSupport该类提供了对于事务处理,连接关闭等功能(由此可以看出JDBCtemplate的每个dao方法都有事务处理和数据库连接打开和关闭,所以后期如果是复杂的业务逻辑,需要整合多个dao'进行事务处理),而且在里面还包含一个 XxxTemplate类,该类对数据库操作对象进行了封装(JDBC中指的是PreparedStatementHibernate中指的是Session + Query

下面完成新闻表的CRUD

建立项目,并加入Spring支持。

一共5个类库

 

完成DataBaseConnection的配置,该类已经由apache提供的BasicDataSource进行了管理,只需要将其配置到spring配置文件中即可。

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

        <property name="driverClassName" value="org.gjt.mm.mysql.Driver"></property>

        <property name="url" value="jdbc:mysql://localhost:3306/test"></property>

        <property name="username" value="root"></property>

        <property name="password" value="mysqladmin"></property>

    </bean>

编写vo类以及DAO接口,这里与之前没有区别。

建立DAO实现类

一定注意,继承jdbcDaoSupport

package cn.mldn.springjdbc.dao.impl;

 

import java.sql.Timestamp;

import java.util.List;

 

import org.springframework.jdbc.core.support.JdbcDaoSupport;

 

import cn.mldn.springjdbc.dao.NewsDAO;

import cn.mldn.springjdbc.mapper.NewsMapper;

import cn.mldn.springjdbc.vo.News;

 

publicclass NewsDAOImpl extends JdbcDaoSupport implements NewsDAO {

 

    publicboolean doCreate(News vo) throws Exception {

        // 使用Spring提供的JdbcTemplate来完成数据库操作

        String sql = "INSERT INTO news (title,keyword,content,post_date,important,img) VALUES (?,?,?,?,?,?)";

        // 该方法替代了PreparedStatement中的executeUpdate()

        if (this.getJdbcTemplate().update(sql, vo.getTitle(), vo.getKeyword(),

                vo.getContent(), new Timestamp(vo.getPostDate().getTime()),

                vo.getImportant(), vo.getImg()) > 0) {

            returntrue;

        }

        returnfalse;

    }

 

    publicboolean doRemove(Object id) throws Exception {

        String sql = "DELETE FROM news WHERE id = ?";

        if (this.getJdbcTemplate().update(sql, id) > 0) {

            returntrue;

        }

        returnfalse;

    }

 

    publicboolean doUpdate(News vo) throws Exception {

        String sql = "UPDATE news SET title = ?,keyword = ? WHERE id = ?";

        if (this.getJdbcTemplate().update(sql, vo.getTitle(), vo.getKeyword(),

                vo.getId()) > 0) {

            returntrue;

        }

        returnfalse;

    }

 

    public List<News> findAll(String kw) throws Exception {

        String sql = "SELECT * FROM news WHERE keyword LIKE ?";

        Object[] args = { "%" + kw + "%" };

        // List all = this.getJdbcTemplate().query(sql, args,

        // new RowMapper<News>() {

        // public News mapRow(ResultSet rs, int rows)

        // throws SQLException {

        // News news = new News();

        // news.setId(rs.getInt(1));

        // news.setTitle(rs.getString(2));

        // news.setKeyword(rs.getString(3));

        // news.setContent(rs.getString(4));

        // news.setPostDate(rs.getTimestamp(5));

        // news.setImportant(rs.getString(6));

        // news.setImg(rs.getString(7));

        // return news;

        // }

        // });

        List all = this.getJdbcTemplate().query(sql, args, new NewsMapper());

        return all;

    }

 

    public List<News> findAll(int cp, int ls, String kw) throws Exception {

        String sql = "SELECT * FROM news WHERE keyword LIKE ? LIMIT ?,?";

        Object[] args = { "%" + kw + "%", (cp - 1) * ls, ls };

        List all = this.getJdbcTemplate().query(sql, args, new NewsMapper());

        return all;

    }

 

    public News findById(Object id) throws Exception {

        String sql = "SELECT * FROM news WHERE id = ?";

        Object[] args = { id };

        News news = this.getJdbcTemplate().queryForObject(sql, args,

                new NewsMapper());

        return news;

    }

 

    publicint getCount(String kw) throws Exception {

        String sql = "SELECT count(id) FROM news WHERE keyword LIKE ?";

        Object[] args = {"%"+kw+"%"};

        int count=  this.getJdbcTemplate().queryForInt(sql, args);

        return count;

    }

 

}

 

必须掌握JdbcTemplate里的常用方法以及RowMapper的使用。

JdbcTemplate的方法:

1)   添加,修改,删除à update(String sql, Object… args),返回int,如果为0表示失败,否则成功

2)   查询返回集合(集合中保存vo对象)à query(String sqlObject[] argsRowMapper<vo类型>),需要传入RowMapper规则,返回List集合。

3)   查询返回vo对象à queryForObject(String sqlObject[] argsRowMapper<vo类型>)

4)   查询返回int值à queryForInt(String sql Object… args),一般在查询全部记录数时使用

 

要使用这个JdbcTemplate,需要在spring配置中加入对这个对象的注入。

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

        <property name="driverClassName" value="org.gjt.mm.mysql.Driver"></property>

        <property name="url" value="jdbc:mysql://localhost:3306/test"></property>

        <property name="username" value="root"></property>

        <property name="password" value="mysqladmin"></property>

    </bean>

 

 

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">  //模板类直接注入数据源类

        <property name="dataSource">

            <ref bean="dataSource" />

        </property>

    </bean>

 

    <bean id="newsdaoimpl" class="cn.mldn.springjdbc.dao.impl.NewsDAOImpl">//DAO类注入模板类,进行数据库操作

        <property name="jdbcTemplate">

            <ref bean="jdbcTemplate"></ref>

        </property>

    </bean>

 //说明下,NewsDAOImpl是没有jdbcTemplate属性的,但确依赖注入了,因为此类继承了JdbcDaoSupport,而JdbcDaoSupportjdbcTemplate属性

public abstract class JdbcDaoSupport extends DaoSupport {

private JdbcTemplate jdbcTemplate;

编写Service服务类

package cn.mldn.springjdbc.service.impl;

 

import java.util.HashMap;

import java.util.Map;

 

import cn.mldn.springjdbc.dao.NewsDAO;

import cn.mldn.springjdbc.service.NewsService;

import cn.mldn.springjdbc.vo.News;

 

publicclass NewsServiceImpl implements NewsService {

 

    private NewsDAO newsdao;

 

    publicboolean doCreate(News news) throws Exception {

        returnnewsdao.doCreate(news);

    }

 

    public Map findAll(int cp, int ls, String kw) throws Exception {

        Map map = new HashMap();

        map.put("all", this.newsdao.findAll(cp, ls, kw));

        map.put("count", this.newsdao.getCount(kw));

        return map;

    }

 

    publicvoid setNewsdao(NewsDAO newsdao) {

        this.newsdao = newsdao;

    }

 

}

 

也需要将服务类配置到spring配置文件中。

    <bean id="newsserviceimpl" class="cn.mldn.springjdbc.service.impl.NewsServiceImpl">

        <property name="newsdao">

            <ref bean="newsdaoimpl"></ref>

        </property>

    </bean>

 

测试没问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值