第一个Mybatis程序
1、首先创建一个数据库
CREATE DATABASE mybatis;
CREATE TABLE `user`( `id` INT(20) NOT NULL PRIMARY KEY, `name` VARCHAR(30) NOT NULL, `pwd` VARCHAR(30) NOT NULL )ENGINE = INNODB DEFAULT CHARSET=utf8; INSERT INTO `user`(`id`,`name`,`pwd`) VALUES(1,'张三',123456); SELECT * FROM `user`;
2、idea中新建一个普通的maven项目
在这个项目中我们可以删除src目录,然后我们可以在这个项目中创建子模块的maven项目。父项目的pom.xml导入的依赖子模块也能使用,子模块有特殊需要的依赖再导,这样我们就节省了时间。
父项目的pom.xml导入的依赖:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.49</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.13</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency>
还需导入build这个标签(可以将写在dao层接口的实现接口配置文件mappper.xml这些资源打包时导出来。如果这些文件在resource中且和接口的路径一致则能直接打包出)
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build>
3、父项目的目录下新建一个maven的子模块
子模块的resources目录下创建一个mybatis的核心配置文件,命名为mybatis-config.xml。配置文件中environments中可以配置多个环境,通过default中的参数值和每个环境中id的值相匹配。dataSource标签中配置数据库的驱动、url地址、用户名和密码。
<?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核心配置文件--> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"/> <property name="username" value="数据库用户名"/> <property name="password" value="数据库密码"/> </dataSource> </environment> </environments> </configuration>
4、创建一个工具类(拿到一个SqlSession对象)
创建一个工具类:MybatisUtil。工具类中首先静态加载一个sqlSessionFactory对象:将mybatis的核心配置文件变成一个流,SqlSessionFactoryBuilder中的build方法读取这个文件流,new出sqlSessionFactory对象。工具类中再写一个静态的方法拿到SqlSession,通过类中静态加载出来的sqlSessionFactory中的openSession方法获得。这样我们在new工具类MybatisUtil时就可以使用getSqlSession方法拿到一个SqlSession对象。
public class MybatisUtil { public static SqlSessionFactory sqlSessionFactory; static { try { //获取sqlSessionFactory对象 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(); } }
5、编写一个实体类
写一个和数据库中的user表相对应的实体类,导入lombok依赖,使用注解完成get、set、有参无参等构造。
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> </dependency>
@Data @AllArgsConstructor @NoArgsConstructor public class User { private int id; private String name; private String pwd; }
6、编写Dao层的接口和实现的配置文件
写一个UserMapper的接口,里面写方法。
public interface UserMapper { List<User> getUserList(); }
写实现接口的配置文件UserMapper.xml(原本这里是接口实现类UserMapperImpl)。mapper标签中的namespace属性用来绑定我们刚才的接口;mapper标签中可以添加增删改查等标签,这里是select标签,里面的id属性是绑定接口中的方法名,resultType属性是返回值的类型,这里返回值的类型是我们编写的实体类。
注意:这里绑定接口的命名空间、id、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.along.dao.UserMapper"> <select id="getUserList" resultType="com.along.pojo.User"> select * from mybatis.user </select> </mapper>
然后接口或配置文件在mybatis的核心配置文件中注册,不然会爆一个绑定错误。这里需要注意的是mapper有三种注册方式,class方式路径每个包之间用"."来间隔,resource方式路径每个包之间用"/"来间隔,用错符号会爆初始化异常的错误。
<mappers> <mapper resource="com/along/dao/UserMapper.xml"/> </mappers>
或
<mappers> <mapper class="com.along.dao.UserMapper"/> </mappers>
7、测试
写一个测试类看是否能联通数据库,看是否能完成增删改查操作。添加了junit的依赖,可以使用注解@Test完成对接口的测试,不需要用main方法进入,非常得便捷。
第一步、使用我们编写的工具类获取sqlSession对象。第二步、使用获得的sqlSession对象获得mapper对象,这个mapper对象就相当于接口实现类的实例化对象。
public class UserDaoTest { @Test public void test(){ //第一步获得sqlSession对象 SqlSession sqlSession = MybatisUtil.getSqlSession(); //执行sql UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> userList = mapper.getUserList(); for (User user : userList) { System.out.println(user); }
//关闭sqlSession
sqlSession.close(); } }
成功了
可能遇到的问题
1.配置文件没有注册
2.绑定接口错误。
3.方法名不对
4.返回类型不对
5. Maven导出资源问题
environments