spirng_3_代理模式

1.Spring JDBC 數據訪問

Spring JDBC是Spring所提供的持久層技術,它的主要目標是降低使用JDBC API的門檻,以一種更直接,更簡介,更簡單的方式使用JDBC API, 在Spring JDBC裏,僅需做那些與業務相關的DML操作,而將資源獲取,Statment創建,資源釋放以及異常處理等繁雜而乏味的工作交給Spring JDBC..

雖然ORM的框架已經成熟豐富,但是JDBC的靈活,直接的特性,依然讓他擁有自己的用武之地,如在完全依賴查詢模型動態產生查詢語句的綜合查詢系統中,Hibernaye,MyBatis,JPA等框架都無法使用,這裏JDBC是唯一的選擇.

2.JdbcTemplate 的使用

1.導入jar包

 <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.37</version>
    </dependency>
    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.5.2</version>
    </dependency>
    <!-- 配置的 spring-jdbc -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>4.3.18.RELEASE</version>
    </dependency>

2.測試 JdbcTemplate的使用

public void test() {

    //創建一個連接池
    ComboPooledDataSource comboPooledDataSource=new ComboPooledDataSource();
    try {
        comboPooledDataSource.setDriverClass("com.mysql.jdbc.Driver");
        comboPooledDataSource.setJdbcUrl("jdbc:mysql://localhost:3306/ssm");
        comboPooledDataSource.setUser("root");
        comboPooledDataSource.setPassword("123");

        //2.創建JdbcTemplate對象
        JdbcTemplate jdbcTemplate=new JdbcTemplate(comboPooledDataSource);


        //3.執行sql
        String sql="insert into users values(null,?,?)";

       jdbcTemplate.update(sql,"daimenglaoshi","123");


    } catch (PropertyVetoException e) {
        e.printStackTrace();
    }

}

3.用spring 創建ComboPooledDataSource和JdbcTemplate對象

3.1添加ioc相關jar包

<!-- 導入spring的核心jar包 -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>4.3.18.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-beans</artifactId>
  <version>4.3.18.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>4.3.18.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context-support</artifactId>
  <version>4.3.18.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-expression</artifactId>
  <version>4.3.18.RELEASE</version>
</dependency>

 

3.2創建db.properties文件

driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ssm
user=root
password=123

3.3在applicationContext.xml文件中創建對象

<!-- 導入db.properties文件 -->
<context:property-placeholder location="db.properties"></context:property-placeholder>

<!-- 創建一個連接池對象 -->
<bean id="comboPooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
   <property name="driverClass" value="${driverClass}" />
    <property name="jdbcUrl" value="${url}"/>
    <property name="user" value="${user}" />
    <property name="password" value="${password}" />
</bean>
<!-- 創建一個jdbcTemplate對象 並且通過構造函數 將連接池對象 注入到jdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" >
    <constructor-arg name="dataSource" ref="comboPooledDataSource" />
</bean>

3.4 修改dao 層

@Component
public class UsersDao implements IUsersDao {

    //注入jdbcTemplate對象
    @Autowired
    private JdbcTemplate jdbcTemplate;

    public JdbcTemplate getJdbcTemplate() {
        return jdbcTemplate;
    }

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    //update方法 (增 刪 改)
    @Override
    public void add(Users user) {

        String sql = "insert into users values(null,?,?)";

        jdbcTemplate.update(sql, user.getUname(), user.getPassword());

    }

3.5測試

@Test
public void test()
{
    ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");

    IUsersDao usersDao=  applicationContext.getBean("usersDao",IUsersDao.class);

    Users user=new Users("xiaowanglaoshi","123");

    usersDao.add(user);
}

4.JdbcTemplate 常用方法

update:

實現增刪改

 //update方法 (增 刪 改)
    @Override
    public void add(Users user) {

        String sql = "insert into users values(null,?,?)";

        jdbcTemplate.update(sql, user.getUname(), user.getPassword());

    }

queryForObject:

查詢的結果是一個對象或單個值

 

//測試 根據id號查詢
public Users selectUsersById(int uid)
{
    String sql="select * from users where uid=?";

    //查詢 單行數據
    Users user= jdbcTemplate.queryForObject(sql, new Object[]{uid}, new RowMapper<Users>() {

        @Override
        public Users mapRow(ResultSet resultSet, int i) throws SQLException {
            return rowMapHandler(resultSet);
        }
    });

    return user;

}

 //自己組裝對象
    public Users rowMapHandler(ResultSet resultSet) throws SQLException {
          Users user=new Users();
          user.setUid(resultSet.getInt("uid"));
          user.setUname(resultSet.getString("uname"));
          user.setPassword(resultSet.getString("password"));
          return user;
    }

查詢的結果是一個數值

 public int selectUsersCount() {
        String sql = "select count(*) from users";

        int num = jdbcTemplate.queryForObject(sql, Integer.class);

        return num;
    }

query

  //查詢  返回集合
    public List<Users> selectUsers() {
        String sql = "select * from users";

        List<Users> usersList= jdbcTemplate.query(sql, new RowMapper<Users>() {

            //遍歷結果集 將結果集中的每條數據 組裝成Users對象
            @Override
            public Users mapRow(ResultSet resultSet, int i) throws SQLException {
                return rowMapHander(resultSet);
            }
        });

        return usersList;
    }

    //自己組裝對象
    public Users rowMapHander(ResultSet resultSet) throws SQLException {
          Users user=new Users();
          user.setUid(resultSet.getInt("uid"));
          user.setUname(resultSet.getString("uname"));
          user.setPassword(resultSet.getString("password"));
          return user;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章