第一步:
导入依赖
<dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.4</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.30</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>compile</scope> </dependency>
第二步:配置核心文件--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"> <!-- mybatis的基本配置文件:主要配置基本的上下文参数和运行环境 --> <configuration> <!--配置--> <properties resource="dbconfig.properties"></properties> <!--设置 --> <settings> <!--缓存配置的全局开关:如果这里设置成false,那么即便在映射器中配置开启也无济于事 --> <setting name="cacheEnabled" value="true" /> <!--延时加载的全局开关 --> <setting name="lazyLoadingEnabled" value="false" /> <!-- 是否允许单一语句返回多结果集 --> <setting name="multipleResultSetsEnabled" value="true" /> <!-- 使用列标签代替列名,需要兼容驱动 --> <setting name="useColumnLabel" value="true" /> <!-- 允许JDBC自动生成主键,需要驱动兼容。如果设置为true,则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍能正常工作 --> <setting name="useGeneratedKeys" value="false" /> <!-- 指定MyBatis该如何自动映射列到字段或属性:NONE表示取消自动映射;PARTIAL表示只会自动映射,没有定义嵌套结果集和映射结果集;FULL会自动映射任意复杂的结果集,无论是否嵌套 --> <setting name="autoMappingBehavior" value="PARTIAL" /> <!-- 配置默认的执行器:SIMPLE是普通的执行器;REUSE会重用预处理语句;BATCH会重用语句并执行批量更新 --> <setting name="defaultExecutorType" value="SIMPLE" /> <!--设置超时时间:它决定驱动等待数据库响应的秒数,任何正整数--> <setting name="defaultStatementTimeout" value="25"/> <!--设置数据库驱动程序默认返回的条数限制,此参数可以重新设置,任何正整数 --> <setting name="defaultFetchSize" value="100" /> <!-- 允许在嵌套语句中使用分页(RowBounds) --> <setting name="safeRowBoundsEnabled" value="false" /> <!-- 是否开启自动驼峰命名规则,即从a_example到aExample的映射 --> <setting name="mapUnderscoreToCamelCase" value="true" /> <!-- 本地缓存机制,防止循环引用和加速重复嵌套循环 --> <setting name="localCacheScope" value="SESSION" /> <!-- 当没有为参数提供特定JDBC类型时,为空值指定JDBC类型。某些驱动需要指定列的JDBC类型,多数情况直接用一般类型即可,如NULL/VARCHAR/OTHER --> <setting name="jdbcTypeForNull" value="OTHER" /> <!-- 指定触发延迟加载的方法,如equals/clone/hashCode/toString --> <setting name="lazyLoadTriggerMethods" value="equals" /> </settings> <!--别名:pojo对象的别名 --> <typeAliases> <!--对类单独进行别名设置 --> <typeAlias alias="user" type="com.itheima.domain.User"></typeAlias> <!-- 对包进行扫描,可以批量进行别名设置,设置规则是:获取类名称,将其第一个字母变为小写 --> <!-- <package name="com.itheima.domain"/>--> </typeAliases> <!-- 配置环境--> <environments default="mysql"> <!--配置mysql的环境--> <environment id="mysql"> <!--配置事务的类型--> <transactionManager type="JDBC"></transactionManager> <!--配置连接池--> <dataSource type="POOLED"> <!--配置连接数据库的4个基本信息--> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <!--指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件--> <mappers> <!--<mapper resource="com/itheima/mapper/IUserMapper.xml"/>--> <package name="com.itheima.mapper"/>
<!--此处是接口绑定的形式,使用包路径映射的话,需要注意的是该映射文件与接口属于同一路径下-->
</mappers> </configuration>
第三步:配置映射文件
<?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"> <!-- namespace:名称空间;指定为接口的全类名 id:唯一标识 resultType:返回值类型 #{id}:从传递过来的参数中取出id值 --> <mapper namespace="com.itheima.mapper.IUserMapper"> <select id="findAll" resultType="user"> select * from user; </select> <insert id="add" parameterType="com.itheima.domain.User"> insert into user (id,username) values (#{id},#{username}); </insert> <update id="update" parameterType="com.itheima.domain.User"> update user set username=#{username} where id=#{id} </update> <delete id="del" parameterType="int"> delete from user where id=#{id} </delete> </mapper>
第四步:测试
package com.itheima.test; import com.itheima.domain.User; import com.itheima.mapper.IUserMapper; 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 org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.List; public class MybatisTest { @Test public void test() throws IOException { //读取核心配置文件产生流对象 InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml"); //构建者模式 SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); //创建SqlSession工厂 SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is); SqlSession sqlSession = sqlSessionFactory.openSession(); IUserMapper userMapper = sqlSession.getMapper(IUserMapper.class); //查询所有 List<User> users = userMapper.findAll(); for (User user:users) { System.out.println(user); } /* //添加 User user = new User(); user.setId(2); user.setUsername("zhangsan");
userMapper.add(user);
*/
/* User user=new User(); user.setId(2);
user.setUsername("wangwu");
userMapper.update(user);*/
/*userMapper.del(2);*/
sqlSession.commit(); sqlSession.close(); } }