1.环境搭建,pom.xml配置依赖jar
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.25</version> </dependency> </dependencies>
新建数据库
create table t_user( id int primary key auto_increment, username varchar(11), password varchar(11), age int )
创建对应的实体类User
package com.xf.pojo; public class User { private int id; private String username; private String password; private int age; public User() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", age=" + age + '}'; } }
添加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> <!-- 配置MyBatis运行环境 --> <environments default="development"> <environment id="development"> <!-- 配置JDBC事务管理 --> <transactionManager type="JDBC"></transactionManager> <!-- POOLED配置JDBC数据源连接池 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://120.78.195.41:3306/test?useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="***"/> <property name="password" value="***"/> </dataSource> </environment> </environments> <!--注册UserMapper.xml--> <mappers> <mapper resource="com/xf/mapper/UserMapper.xml"/> </mappers> </configuration>
myBatis开发有两种方式
1.使用原声接口
2.Mapper代理实现自定义接口
第一种:
(1)创建Mapper文件UserMapper.xml。
namespace通常设置为文件所在包名+文件名,但不是一定要这样设置,可以自定义,出于代码规范一般设置为包名+文件名的形式。
parameterType为参数数据类型。
resultType为返回值数据类型。
namespace通常设置为文件所在包名+文件名,但不是一定要这样设置,可以自定义,出于代码规范一般设置为包名+文件名的形式。
parameterType为参数数据类型。
resultType为返回值数据类型。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.xf.mapper.UserMapper"> <select id="get" parameterType="int" resultType="com.xf.pojo.User"> select * from t_user where id=#{id} </select> </mapper>
(2)上面config里面的注册UserMapper
(3)测试类调用原生接口执行SQL语句获取结果。
package com.xf; import com.xf.pojo.User; 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; /** * Unit test for simple App. */ public class AppTest { public static void main(String[] args) throws IOException { //加载mybatis配置文件 InputStream is=AppTest.class.getClassLoader().getResourceAsStream("config.xml"); //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件) SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder(); SqlSessionFactory factory=builder.build(is); //获取sqlSession SqlSession session=factory.openSession(); //调用Mybatis原声接口执行SQL //statement 为UserMapper.xml的namespace值+"."+select标签的id值 String statement="com.xf.mapper.UserMapper.get"; User user=session.selectOne(statement,1); System.out.println(user); } }结果:
提示:如果出现BuilderException错误,请看我上一篇文章
第二种:
我们在实际开发中,推荐使用第二种方式:自定义接口,但是不需要实现该接口,通过Mapper代理来实现,具体的实现逻辑或者说要执行的SQL语句配置在Mapper.xml中。这里为了统一,我们换了一个名字UserDAO.xml,实际和UserMapper.xml没有区别。
(1)自定义接口
(1)自定义接口
package com.xf.dao; import com.xf.pojo.User; public interface UserDao { /** * 新增用户 * @param user * @return */ public int addUser(User user); /** * 根据id删除用户 * @param id * @return */ public int deleteUser(int id); /** * 修改用户 * @param user * @return */ public int updateUser(User user); /** * 根据id查询用户 * @param id * @return */ public User selectUserById(int id); }
statement标签根据SQL执行的业务可选择insert,delete,update,select。
MyBatis会根据规则自动创建UserDAO接口实现类的代理对象。
规则如下:
1.UserDAO.xml 中 namespace 为接口的全类名。
2.UserDAO.xml 中 statement 的 id 为接口中对应的方法名。
3.UserDAO.xml 中 statement 的 parameterType 和接口中对应方法的参数类型一致。
4.UserDAO.xml 中 statement 的 resultType 和接口中对应方法的返回值类型一致。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.xf.dao.UserDao"> <insert id="addUser" parameterType="com.xf.pojo.User"> insert into t_user (username,password,age) values (#{username},#{password},#{age}) </insert> <delete id="deleteUser" parameterType="int"> delete from t_user where id=#{id} </delete> <update id="updateUser"> update t_user set username=#{username},password=#{password},age=#{age} where id=#{id} </update> <select id="selectUserById" parameterType="int" resultType="com.xf.pojo.User"> select * from t_user where id=#{id} </select> </mapper>
(3)在config.xml注册UserDao.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> <!-- 配置MyBatis运行环境 --> <environments default="development"> <environment id="development"> <!-- 配置JDBC事务管理 --> <transactionManager type="JDBC"></transactionManager> <!-- POOLED配置JDBC数据源连接池 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://120.78.195.41:3306/test?useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="***"/> <property name="password" value="***"/> </dataSource> </environment> </environments> <!--注册UserMapper.xml--> <mappers> <!--<mapper resource="com/xf/mapper/UserMapper.xml"/>--> <mapper resource="com/xf/dao/UserDao.xml"/> </mappers> </configuration>
(4)测试
package com.xf; import com.xf.dao.UserDao; import com.xf.pojo.User; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.InputStream; public class Test { public static void main(String[] args) { //加载MyBatis配置文件 InputStream is = Test.class.getClassLoader().getResourceAsStream("config.xml"); SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is); //获取SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); //获取实现接口的代理对象 UserDao userDao = sqlSession.getMapper(UserDao.class); //新增用户 User user1 = new User(); user1.setUsername("张三"); user1.setPassword("123"); user1.setAge(22); System.out.println(userDao.addUser(user1)); sqlSession.commit(); //删除用户 System.out.println(userDao.deleteUser(2)); sqlSession.commit(); //查询用户 User user2 = userDao.selectUserById(1); System.out.println(user2); //修改用户 User user3 = userDao.selectUserById(1); user3.setUsername("李四"); System.out.println(userDao.updateUser(user3)); sqlSession.commit(); } }