1. 程式人生 > 其它 >SSM16.1【Mybatis:Mybatis的註解開發1】

SSM16.1【Mybatis:Mybatis的註解開發1】

傳統xml方式實現Mybatis的增刪改查

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion
>4.0.0</modelVersion> 6 7 <groupId>com.haifei</groupId> 8 <artifactId>SSM16_mybatis_anno</artifactId> 9 <version>1.0-SNAPSHOT</version> 10 <packaging>war</packaging> 11 12 13 <dependencies> 14 <dependency>
15 <groupId>mysql</groupId> 16 <artifactId>mysql-connector-java</artifactId> 17 <version>5.1.32</version> 18 </dependency> 19 <dependency> 20 <groupId>org.mybatis</groupId> 21 <
artifactId>mybatis</artifactId> 22 <version>3.4.6</version> 23 </dependency> 24 <dependency> 25 <groupId>junit</groupId> 26 <artifactId>junit</artifactId> 27 <version>4.12</version> 28 </dependency> 29 <dependency> 30 <groupId>log4j</groupId> 31 <artifactId>log4j</artifactId> 32 <version>1.2.17</version> 33 </dependency> 34 </dependencies> 35 36 37 <build> 38 <plugins> 39 <plugin> 40 <groupId>org.apache.maven.plugins</groupId> 41 <artifactId>maven-compiler-plugin</artifactId> 42 <version>3.1</version> 43 <configuration> 44 <target>1.8</target> 45 <source>1.8</source> 46 <encoding>UTF-8</encoding> 47 </configuration> 48 </plugin> 49 </plugins> 50 </build> 51 52 53 </project>
 1 ### direct log messages to stdout ###
 2 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
 3 log4j.appender.stdout.Target=System.out
 4 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
 5 log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
 6 
 7 ### direct messages to file mylog.log ###
 8 log4j.appender.file=org.apache.log4j.FileAppender
 9 log4j.appender.file.File=c:/mylog.log
10 log4j.appender.file.layout=org.apache.log4j.PatternLayout
11 log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
12 
13 ### set log levels - for more verbose logging change 'info' to 'debug' ###
14 
15 #log4j.rootLogger=info, stdout
16 log4j.rootLogger=debug, stdout
1 jdbc.driver=com.mysql.jdbc.Driver
2 jdbc.url=jdbc:mysql://localhost:3306/hm_ssm
3 jdbc.username=root
4 jdbc.password=root
 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
 3 
 4 <!--The content of element type "configuration" must match
 5 "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,
 6 objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)".-->
 7 
 8 <configuration>
 9 
10     <!--載入外部properties檔案-->
11     <properties resource="jdbc.properties"></properties>
12 
13     <!--自定義別名-->
14     <typeAliases>
15         <typeAlias type="com.haifei.domain.User" alias="user" />
16     </typeAliases>
17 
18     <!--註冊型別處理器-->
19     <typeHandlers>
20         <typeHandler handler="com.haifei.handler.DateTypeHandler" />
21     </typeHandlers>
22 
23     <environments default="development">
24         <!--配置資料來源環境-->
25         <environment id="development">
26             <transactionManager type="JDBC"></transactionManager>
27             <dataSource type="POOLED">
28                 <property name="driver" value="${jdbc.driver}"/>
29                 <property name="url" value="${jdbc.url}"/>
30                 <property name="username" value="${jdbc.username}"/>
31                 <property name="password" value="${jdbc.password}"/>
32             </dataSource>
33         </environment>
34     </environments>
35 
36     <!--xml實現mybatis-CRUD:載入對映檔案-->
37     <mappers>
38         <mapper resource="com/haifei/mapper/UserMapper.xml"/>
39     </mappers>
40 
41 
42 
43 </configuration>
 1 package com.haifei.handler;
 2 
 3 import org.apache.ibatis.type.BaseTypeHandler;
 4 import org.apache.ibatis.type.JdbcType;
 5 
 6 import java.sql.CallableStatement;
 7 import java.sql.PreparedStatement;
 8 import java.sql.ResultSet;
 9 import java.sql.SQLException;
10 import java.util.Date;
11 
12 public class DateTypeHandler extends BaseTypeHandler<Date> {
13 
14     /**
15      * 將java資料型別 轉換為 資料庫所需的資料型別
16      * @param preparedStatement
17      * @param i
18      * @param date
19      * @param jdbcType
20      * @throws SQLException
21      */
22     @Override
23     public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType) throws SQLException {
24         long time = date.getTime();
25         preparedStatement.setLong(i, time);
26     }
27 
28     /**
29      * 將資料庫中的資料型別 轉換為 所需的java資料型別
30      * @param resultSet  查詢出的結果集
31      * @param s  要轉換的欄位名稱
32      * @return
33      * @throws SQLException
34      */
35     @Override
36     public Date getNullableResult(ResultSet resultSet, String s) throws SQLException {
37         //獲取結果集中需要的資料型別(long)轉換為Date型別,並返回
38         long aLong = resultSet.getLong(s);
39         Date date = new Date(aLong);
40         return date;
41     }
42 
43     /**
44      * 將資料庫中的資料型別 轉換為 所需的java資料型別
45      * @param resultSet
46      * @param i
47      * @return
48      * @throws SQLException
49      */
50     @Override
51     public Date getNullableResult(ResultSet resultSet, int i) throws SQLException {
52         long aLong = resultSet.getLong(i);
53         Date date = new Date(aLong);
54         return date;
55     }
56 
57     /**
58      * 將資料庫中的資料型別 轉換為 所需的java資料型別
59      * @param callableStatement
60      * @param i
61      * @return
62      * @throws SQLException
63      */
64     @Override
65     public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
66         long aLong = callableStatement.getLong(i);
67         Date date = new Date(aLong);
68         return date;
69     }
70 }
 1 package com.haifei.domain;
 2 
 3 import java.util.Date;
 4 import java.util.List;
 5 
 6 public class User {
 7 
 8     private int id;
 9     private String username;
10     private String password;
11     private Date birthday;
12 
13 
14     public Date getBirthday() {
15         return birthday;
16     }
17 
18     public void setBirthday(Date birthday) {
19         this.birthday = birthday;
20     }
21 
22     public int getId() {
23         return id;
24     }
25 
26     public void setId(int id) {
27         this.id = id;
28     }
29 
30     public String getUsername() {
31         return username;
32     }
33 
34     public void setUsername(String username) {
35         this.username = username;
36     }
37 
38     public String getPassword() {
39         return password;
40     }
41 
42     public void setPassword(String password) {
43         this.password = password;
44     }
45 
46     @Override
47     public String toString() {
48         return "User{" +
49                 "id=" + id +
50                 ", username='" + username + '\'' +
51                 ", password='" + password + '\'' +
52                 ", birthday=" + birthday +
53                 '}';
54     }
55 }
 1 package com.haifei.mapper;
 2 
 3 import com.haifei.domain.User;
 4 import org.apache.ibatis.annotations.Delete;
 5 import org.apache.ibatis.annotations.Insert;
 6 import org.apache.ibatis.annotations.Select;
 7 import org.apache.ibatis.annotations.Update;
 8 
 9 import java.util.List;
10 
11 
12 public interface UserMapper {
13 
14 
15     public void save(User user);
16 
17 
18     public void delete(int id);
19 
20 
21     public void update(User user);
22 
23 
24     public List<User> findAll();
25 
26 
27     public User findById(int id);
28 
29 }
 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 3 
 4 <mapper namespace="com.haifei.mapper.UserMapper">
 5 
 6     <insert id="save" parameterType="user">
 7         insert into user values(#{id},#{username},#{password},#{birthday})
 8     </insert>
 9 
10     <delete id="delete" parameterType="int">
11         delete from user where id=#{id}
12     </delete>
13 
14     <update id="update" parameterType="user">
15         update user set username=#{username},password=#{password},birthday=#{birthday} where id=#{id}
16     </update>
17 
18     <select id="findAll" resultType="user">
19         select * from user
20     </select>
21 
22     <select id="findById" parameterType="int" resultType="user">
23         select * from user where id=#{id}
24     </select>
25 
26 </mapper>
 1 package com.haifei.test;
 2 
 3 import com.haifei.domain.User;
 4 import com.haifei.mapper.UserMapper;
 5 import org.apache.ibatis.io.Resources;
 6 import org.apache.ibatis.session.SqlSession;
 7 import org.apache.ibatis.session.SqlSessionFactory;
 8 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 9 import org.junit.Before;
10 import org.junit.Test;
11 
12 import java.io.IOException;
13 import java.io.InputStream;
14 import java.util.Date;
15 import java.util.List;
16 
17 public class MybatisTest {
18 
19     private UserMapper mapper;
20 
21     @Before
22     public void before() throws IOException {
23         InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
24         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
25         SqlSession sqlSession = sqlSessionFactory.openSession(true); //true-->事務自動提交
26         mapper = sqlSession.getMapper(UserMapper.class);
27     }
28 
29     @Test
30     public void testSave(){
31         User user = new User();
32         user.setUsername("222");
33         user.setPassword("222");
34         user.setBirthday(new Date());
35         mapper.save(user);
36         //Updates: 1
37     }
38 
39     @Test
40     public void testUpdate(){
41         User user = new User();
42         user.setId(12);
43         user.setUsername("333");
44         user.setPassword("333");
45         user.setBirthday(new Date());
46         mapper.update(user);
47         //Updates: 1
48     }
49 
50     @Test
51     public void testDelete(){
52         mapper.delete(12);
53         //Updates: 1
54     }
55 
56     @Test
57     public void testFindAll(){
58         List<User> userList = mapper.findAll();
59         for (User user : userList) {
60             System.out.println(user);
61         }
62         /*
63         User{id=1, username='zhangsan', password='123', birthday=Sat Jul 24 20:00:29 CST 2021}
64         User{id=2, username='lisi', password='345', birthday=Sat Jul 24 20:00:29 CST 2021}
65         User{id=3, username='tom', password='abc', birthday=Sat Jul 24 20:00:29 CST 2021}
66         User{id=4, username='lucy', password='def', birthday=Sat Jul 24 20:00:29 CST 2021}
67         User{id=5, username='sam', password='sam', birthday=Sat Jul 24 20:00:29 CST 2021}
68         User{id=9, username='11', password='11', birthday=Sat Jul 24 20:00:29 CST 2021}
69          */
70     }
71 
72     @Test
73     public void testFindById(){
74         User user = mapper.findById(5);
75         System.out.println(user); //User{id=5, username='sam', password='sam', birthday=Sat Jul 24 20:00:29 CST 2021}
76     }
77 
78 }