spring示例--01
阿新 • • 發佈:2020-11-23
主要內容: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&useUnicode=true&characterEncoding=utf8"/> <!--注意&符號寫為 & 否則解析配置檔案會出錯--> <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標籤)