使用注解配置
(一).使用注解进行CRUD操作
1.dao的持久层实现
public interface UserDao {
@Select ( "select * from user" )
List< User> findAll ( ) ;
@Insert ( "insert into user (username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address})" )
void saveUser ( User user) ;
@Update ( "update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id = #{id}" )
void updateUser ( User user) ;
@Delete ( "delete from user where id = #{id} " )
void deleteUser ( Integer id) ;
@Select ( "select * from user where id = #{id} " )
User findById ( Integer id) ;
@Select ( "select * from user where username like '%${value}%'" )
List< User> findByUsername ( String username) ;
@Select ( "select count(*) from user " )
Integer findTotal ( ) ;
}
2.domain的实现类
public class User implements Serializable {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
}
3.resources的配置文件
SqlMapConfig.xml
< ? xml version= "1.0" encoding= "UTF-8" ? >
< ! DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd" >
< configuration>
< ! -- 引入外部配置文件:配置properties文件 -- >
< properties resource= "jdbcConfig.properties" > < / properties>
< ! -- 配置别名 -- >
< typeAliases>
< package name= "com.hugong.domain" > < / package >
< / typeAliases>
< ! -- 配置环境 -- >
< environments default = "mysql" >
< environment id= "mysql" >
< transactionManager type= "JDBC" > < / transactionManager>
< dataSource type= "POOLED" >
< property name= "driver" value= "${jdbc.driver}" > < / property>
< property name= "url" value= "${jdbc.url}" > < / property>
< property name= "username" value= "${jdbc.username}" > < / property>
< property name= "password" value= "${jdbc.password}" > < / property>
< / dataSource>
< / environment>
< / environments>
< ! -- 指定带有注解的dao接口所在位置 -- >
< mappers>
< package name= "com.hugong.dao" > < / package >
< / mappers>
< / configuration>
4.测试类
AnnotationCRUDTest
public class AnnotationCRUDTest {
private InputStream is;
private SqlSessionFactory factory;
private SqlSession sqlSession;
private UserDao userDao;
@Before
public void init ( ) throws IOException {
is = Resources. getResourceAsStream ( "SqlMapConfig.xml" ) ;
factory = new SqlSessionFactoryBuilder ( ) . build ( is) ;
sqlSession = factory. openSession ( ) ;
userDao = sqlSession. getMapper ( UserDao. class ) ;
}
@After
public void destroy ( ) throws IOException {
sqlSession. commit ( ) ;
sqlSession. close ( ) ;
is. close ( ) ;
}
@Test
public void saveTest ( ) {
User user = new User ( ) ;
user. setUsername ( "刘亦菲" ) ;
user. setSex ( "女" ) ;
user. setAddress ( "神雕侠侣" ) ;
user. setBirthday ( new Date ( ) ) ;
userDao. saveUser ( user) ;
}
@Test
public void updateTest ( ) {
User user = new User ( ) ;
user. setId ( 45 ) ;
user. setUsername ( "朱茵" ) ;
user. setSex ( "女" ) ;
user. setAddress ( "上海市" ) ;
user. setBirthday ( new Date ( ) ) ;
userDao. updateUser ( user) ;
}
@Test
public void deleteTest ( ) {
userDao. deleteUser ( 50 ) ;
}
@Test
public void findByOneTest ( ) {
User user = userDao. findById ( 45 ) ;
System. out. println ( user) ;
}
@Test
public void findByNameTest ( ) {
List< User> users = userDao. findByUsername ( "王" ) ;
for ( User user : users) {
System. out. println ( user) ;
}
}
@Test
public void findTotalTest ( ) {
Integer total = userDao. findTotal ( ) ;
System. out. println ( "查询的用户总数为: " + total) ;
}
}
(二).一对多(注解配置)
1.dao的持久层实现
(1).AccoutDao
public interface AccountDao {
@Select ( value = { "select * from account " } )
@Results ( id= "accountMap" , value = {
@Result ( id = true , column = "id" , property = "id" ) ,
@Result ( column = "uid" , property = "uid" ) ,
@Result ( column = "money" , property = "money" ) ,
@Result ( column = "uid" , property = "user" , one = @One ( select =
"com.hugong.dao.UserDao.findById" , fetchType = FetchType. LAZY) ) ,
} )
List< Account> findAll ( ) ;
@Select ( "select * from account where uid = #{userId}" )
List< Account> findAccountByUid ( Integer userId) ;
}
(2).UserDao
public interface UserDao {
@Select ( "select * from user" )
@Results ( id= "userMap" , value = {
@Result ( id= true , column = "id" , property = "userId" ) ,
@Result ( column = "username" , property = "userName" ) ,
@Result ( column = "sex" , property = "userSex" ) ,
@Result ( column = "birthday" , property = "userBirthday" ) ,
@Result ( column = "address" , property = "userAddress" ) ,
@Result ( column = "id" , property = "accounts" , many =
@Many ( select = "com.hugong.dao.AccountDao.findAccountByUid" ,
fetchType = FetchType. LAZY) )
} )
List< User> findAll ( ) ;
@Select ( "select * from user where id = #{id} " )
@ResultMap ( value = { "userMap" } )
User findById ( Integer id) ;
@Select ( "select * from user where username like #{username}" )
@ResultMap ( value = { "userMap" } )
List< User> findByUsername ( String username) ;
}
2.domain的实现类
(1).Account
public class Account implements Serializable {
private Integer id;
private Integer uid;
private double money;
private User user;
}
(2).User
public class User implements Serializable {
private Integer userId;
private String userName;
private Date userBirthday;
private String userSex;
private String userAddress;
private List< Account> accounts;
}
3.resources的配置文件
* SqlMapConfig.xml
< ? xml version= "1.0" encoding= "UTF-8" ? >
< ! DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd" >
< configuration>
< ! -- 引入外部配置文件:配置properties文件 -- >
< properties resource= "jdbcConfig.properties" > < / properties>
< ! -- 配置别名 -- >
< typeAliases>
< package name= "com.hugong.domain" > < / package >
< / typeAliases>
< ! -- 配置环境 -- >
< environments default = "mysql" >
< environment id= "mysql" >
< transactionManager type= "JDBC" > < / transactionManager>
< dataSource type= "POOLED" >
< property name= "driver" value= "${jdbc.driver}" > < / property>
< property name= "url" value= "${jdbc.url}" > < / property>
< property name= "username" value= "${jdbc.username}" > < / property>
< property name= "password" value= "${jdbc.password}" > < / property>
< / dataSource>
< / environment>
< / environments>
< ! -- 指定带有注解的dao接口所在位置 -- >
< mappers>
< package name= "com.hugong.dao" > < / package >
< / mappers>
< / configuration>
4.测试类
(1).AccountTest
public class AccountTest {
private InputStream is;
private SqlSessionFactory factory;
private SqlSession sqlSession;
private AccountDao accountDao;
@Before
public void init ( ) throws IOException {
is = Resources. getResourceAsStream ( "SqlMapConfig.xml" ) ;
factory = new SqlSessionFactoryBuilder ( ) . build ( is) ;
sqlSession = factory. openSession ( ) ;
accountDao = sqlSession. getMapper ( AccountDao. class ) ;
}
@After
public void destroy ( ) throws IOException {
sqlSession. commit ( ) ;
sqlSession. close ( ) ;
is. close ( ) ;
}
@Test
public void findAllTest ( ) {
List< Account> accounts = accountDao. findAll ( ) ;
for ( Account account : accounts) {
System. out. println ( "------每个账户的信息------" ) ;
System. out. println ( account) ;
System. out. println ( account. getUser ( ) ) ;
}
}
}
(2).AnnotationCRUDTest
public class AnnotationCRUDTest {
private InputStream is;
private SqlSessionFactory factory;
private SqlSession sqlSession;
private UserDao userDao;
@Before
public void init ( ) throws IOException {
is = Resources. getResourceAsStream ( "SqlMapConfig.xml" ) ;
factory = new SqlSessionFactoryBuilder ( ) . build ( is) ;
sqlSession = factory. openSession ( ) ;
userDao = sqlSession. getMapper ( UserDao. class ) ;
}
@After
public void destroy ( ) throws IOException {
sqlSession. commit ( ) ;
sqlSession. close ( ) ;
is. close ( ) ;
}
@Test
public void findAllTest ( ) {
List< User> users = userDao. findAll ( ) ;
for ( User user : users) {
System. out. println ( "------每个用户的信息-----" ) ;
System. out. println ( user) ;
System. out. println ( user. getAccounts ( ) ) ;
}
}
@Test
public void findByOneTest ( ) {
User user = userDao. findById ( 45 ) ;
System. out. println ( user) ;
}
@Test
public void findByNameTest ( ) {
List< User> users = userDao. findByUsername ( "%王%" ) ;
for ( User user : users) {
System. out. println ( user) ;
}
}
}