注解直接在接口上实现 需要在核心配置文件中绑定接口 本质:反射机制实现 底层:动态代理
代码流程
1.创建数据库文件db.properties
driver= com. mysql. jdbc. Driver
url= jdbc: mysql:
username= root
password= root
2.创建mybatis核心配置文件mybatis-config.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 resource= "db.properties" / >
< settings>
< ! -- 标准的日志工厂实现-- >
< ! -- < setting name= "logImpl" value= "STDOUT_LOGGING" / > -- >
< ! -- 配置log4j为日志的实现-- >
< setting name= "logImpl" value= "LOG4J" / >
< / settings>
< typeAliases>
< typeAlias type= "com.kuang.pojo.User" alias= "User" / >
< / typeAliases>
< environments default = "development" >
< environment id= "development" >
< transactionManager type= "JDBC" / >
< dataSource type= "POOLED" >
< property name= "driver" value= "${driver}" / >
< property name= "url" value= "${url}" / >
< property name= "username" value= "${username}" / >
< property name= "password" value= "${password}" / >
< / dataSource>
< / environment>
< / environments>
< mappers>
< ! -- 在核心配置文件中绑定接口-- >
< mapper class= "com.kuang.dao.UserMapper" / >
< / mappers>
< / configuration>
3.创建日志文件log4j.properties(此步骤可省略)
#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码
log4j. rootLogger= DEBUG, console, file
#控制台输出的相关设置
log4j. appender. console = org. apache. log4j. ConsoleAppender
log4j. appender. console. Target = System. out
log4j. appender. console. Threshold= DEBUG
log4j. appender. console. layout = org. apache. log4j. PatternLayout
log4j. appender. console. layout. ConversionPattern= [ % c] - % m% n
#文件输出的相关设置
log4j. appender. file = org. apache. log4j. RollingFileAppender
log4j. appender. file. File= . / log/ rzp. log
log4j. appender. file. MaxFileSize= 10 mb
log4j. appender. file. Threshold= DEBUG
log4j. appender. file. layout= org. apache. log4j. PatternLayout
log4j. appender. file. layout. ConversionPattern= [ % p] [ % d{ yy- MM- dd} ] [ % c] % m% n
#日志输出级别
log4j. logger. org. mybatis= DEBUG
log4j. logger. java. sql= DEBUG
log4j. logger. java. sql. Statement= DEBUG
log4j. logger. java. sql. ResultSet= DEBUG
log4j. logger. java. sq1. PreparedStatement= DEBUG
4.创建mybatis工具类MybatisUtils
package com. kuang. utils;
import org. apache. ibatis. io. Resources;
import org. apache. ibatis. session. SqlSession;
import org. apache. ibatis. session. SqlSessionFactory;
import org. apache. ibatis. session. SqlSessionFactoryBuilder;
import java. io. IOException;
import java. io. InputStream;
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis-config.xml" ;
InputStream inputStream = Resources. getResourceAsStream ( resource) ;
sqlSessionFactory = new SqlSessionFactoryBuilder ( ) . build ( inputStream) ;
} catch ( IOException e) {
e. printStackTrace ( ) ;
}
}
public static SqlSession getSqlSession ( ) {
return sqlSessionFactory. openSession ( true) ;
}
}
5.创建实体类对象User
package com. kuang. pojo;
public class User {
private int id;
private String name;
private String password;
public User ( int id, String name, String password) {
this. id = id;
this. name = name;
this. password = password;
}
public User ( ) {
}
public int getId ( ) {
return id;
}
public void setId ( int id) {
this. id = id;
}
public String getName ( ) {
return name;
}
public void setName ( String name) {
this. name = name;
}
public String getPassword ( ) {
return password;
}
public void setPassword ( String password) {
this. password = password;
}
@Override
public String toString ( ) {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
'}' ;
}
}
6.创建接口UserMapper
package com. kuang. dao;
import com. kuang. pojo. User;
import org. apache. ibatis. annotations. * ;
import java. util. List;
public interface UserMapper {
@Select ( "select * from user" )
List< User> findUsers ( ) ;
@Select ( "select * from user where id=#{id}" )
User getUserById ( @Param ( "id" ) int id) ;
@Insert ( "insert into user (id,name,pwd) value(#{id},#{name},#{password})" )
int addUser ( User user) ;
@Delete ( "delete from user where id=#{id}" )
int deletUser ( @Param ( "id" ) int id) ;
@Update ( "update user set name=#{name},pwd=#{password} where id=#{id}" )
int updateUser ( User user) ;
}
7.创建测试类UserMapperTest
package com. kuang. dao;
import com. kuang. pojo. User;
import com. kuang. utils. MybatisUtils;
import org. apache. ibatis. session. SqlSession;
import org. apache. log4j. Logger;
import org. junit. Test;
import java. util. List;
public class UserMapperTest {
static Logger logger = Logger. getLogger ( UserMapperTest. class) ;
@Test
public void findUsers ( ) {
SqlSession sqlSession = MybatisUtils. getSqlSession ( ) ;
UserMapper mapper = sqlSession. getMapper ( UserMapper. class) ;
List< User> users = mapper. findUsers ( ) ;
for ( User u: users) {
System. out. println ( u) ;
}
sqlSession. close ( ) ;
}
@Test
public void getUserById ( ) {
SqlSession sqlSession = MybatisUtils. getSqlSession ( ) ;
UserMapper mapper = sqlSession. getMapper ( UserMapper. class) ;
User users = mapper. getUserById ( 2 ) ;
System. out. println ( users) ;
sqlSession. close ( ) ;
}
@Test
public void addUser ( ) {
SqlSession sqlSession = MybatisUtils. getSqlSession ( ) ;
UserMapper mapper = sqlSession. getMapper ( UserMapper. class) ;
mapper. addUser ( new User ( 4 , "qq" , "112233" ) ) ;
sqlSession. close ( ) ;
}
@Test
public void deletUser ( ) {
SqlSession sqlSession = MybatisUtils. getSqlSession ( ) ;
UserMapper mapper = sqlSession. getMapper ( UserMapper. class) ;
mapper. deletUser ( 4 ) ;
sqlSession. close ( ) ;
}
@Test
public void updateUser ( ) {
SqlSession sqlSession = MybatisUtils. getSqlSession ( ) ;
UserMapper mapper = sqlSession. getMapper ( UserMapper. class) ;
mapper. updateUser ( new User ( 4 , "weixin" , "999" ) ) ;
sqlSession. close ( ) ;
}
}
8.各个文件具体位置
@Param注解
基本类型的参数或者String类型,需要加上 引用类型不需要加 如果只有一个基本类型的话,可以忽略,但是建议大家都加上 我们在SQL中引用的就是我们这里的@Param()中设定的属性名