1. 程式人生 > 實用技巧 >spring示例--01

spring示例--01

主要內容:bean的裝配

①完全的基於xml配置

②基於配置類的

③去掉xml,完全靠註解的

1.準備工作

1.1 資料準備:

CREATE TABLE `user` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `birthday` datetime DEFAULT NULL,
  `sex` varchar(10) DEFAULT NULL,
  `address` varchar(40) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE
=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

INSERT INTO test.user (id, name, birthday, sex, address) VALUES (1, 'name1', '1995-01-01 00:00:00', 'man', 'address1');
INSERT INTO test.user (id, name, birthday, sex, address) VALUES (2, 'name2', '1995-01-01 00:00:00', 'man', 'address2');

1.2 資料操作:使用JdbcTemplate,暫忽略事務控制

1.3 maven包:全都是4.0.0版本

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>${spring-context.version}</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <
artifactId>spring-core</artifactId> <version>${spring-core.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring-beans.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${spring-expression.version}</version> </dependency> <!--spring aop--> <!-- <dependency>--> <!-- <groupId>org.springframework</groupId>--> <!-- <artifactId>spring-aop</artifactId>--> <!-- <version>${spring-aop.version}</version>--> <!-- </dependency>--> <!--spring jdbc--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring-jdbc.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring-tx.version}</version> </dependency>

1.4實體類

package xt.domain;

import lombok.*;


@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class User {
    private Integer id;
    private String username;
    private String birthday;
    private String sex;
    private String address;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", birthday=" + birthday +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

2.基於xml的

Dao裡面通過JdbcTemplate執行sql,JdbcTemplate通過xml配置裝配(建構函式注入)到Dao上

package xt.demo.dao;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.core.RowMapper;
import xt.domain.User;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

public class UserDao {
    private JdbcTemplate jt;  
    public UserDao(JdbcTemplate jt) {this.jt = jt;}
    
    public int saveUser(User user) {
        return jt.update("insert into user values(null,?,?,?,?)",new PreparedStatementSetter(){
            @Override
            public void setValues(PreparedStatement ps) throws SQLException {
                ps.setString(1,user.getUsername());
                ps.setString(2,user.getBirthday());
                ps.setString(3,user.getSex());
                ps.setString(4,user.getAddress());
            }
        });
    }

    public List<User> queryAllUser() {
        List<User> lists = jt.query("select * from user", new RowMapper<User>() {
            @Override
            public User mapRow(ResultSet resultSet, int i) throws SQLException {
                User user = new User();
                user.setId(resultSet.getInt("id"));
                user.setUsername(resultSet.getString("name"));
                user.setBirthday(resultSet.getString("birthday"));
                user.setSex(resultSet.getString("sex"));
                user.setAddress(resultSet.getString("address"));
                return user;
            }
        });
        return lists;
    }
}

相應的配置檔案:beanx.xml 放在Resources的一級目錄下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


    <bean id="UserDao" class="xt.demo.dao.UserDao">
        <constructor-arg name="jt" ref="jdbcTemplate"/>
    </bean>

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource1"></property>
    </bean>

    <!--資料來源-->
    <bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC&amp;useUnicode=true&amp;characterEncoding=utf8"/>    <!--注意&符號寫為 &amp;  否則解析配置檔案會出錯-->
        <property name="username" value="root"/>
        <property name="password" value="123"/>
    </bean>
</beans>

測試:

ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
UserDao userDao = ac.getBean("UserDao", UserDao.class);
List<User> users = userDao.queryAllUser();

基於xml裝配特點:

自由使用,比如自己寫的Dao裡面,要用到第三方庫裡的JdbcTemplate,在bean標籤裡面引用即可

物件很多時,bean標籤也多了起來;每個要獲取bean裡面的物件的地方,都要先讀取xml返回ApplicationContext物件

3.基於配置類

配置類與業務邏輯無關,單獨放在一個地方,只用來配置bean(通過java配置類裝配而不是xml裡的bean標籤)