1.首先创建一个maven项目
在pom文件中导入相关的依赖:
<dependencies>
<!--mybatis的依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!--连接mysql的依赖-->
<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>
</dependencies>
<!--Maven
中默认打包resource
下的资源文件。如果我们的mapper.xml文件不放在resource的目录下
,则需要通过配置告知Maven 让它把指定目录的配置文件也打包
-->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
2.在java目录下创建自己的包 用于存放创建实体类
public class Person implements Serializable { private Integer id; private String name; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Person{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; }
3.在数据库中创建表
4.在resources中添加MyBatis的主配置文件:
<?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> <!-- 设定类型的别名 --> <typeAliases> <!-- 自定义别名 --> <!-- <typeAlias type="com.offcn.bean.Person" alias="per" --> <!-- 扫描形式 扫描包下所有的bean类型java代码 在mapper.xml中使用当前类型的时候,我们只需要使用当前类型类名或者是类名首字母小写形式 --> <package name="com.offcn.bean"/> </typeAliases> <!-- mybatis使用环境 --> <environments default="development"> <environment id="development"> <!-- 自动开启事务 --> <transactionManager type="JDBC" /> <!-- 数据源 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <!--如果是sql8.0以上的版本可能需要指定时区--> <property name="url" value="jdbc:mysql:///mytest"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!-- 扫描mapper.xml配置文件和接口 --> <mappers> <!-- 自定义配置文件 --> <!-- <mapper resource="com/mybatis/mapper/UserMapper.xml"/> --> <!-- 扫描方式加载 --> <package name="com.mybatis.mapper"></package> </mappers> </configuration>
5.在java目录下创建包 用于存放mapper.xml对应的接口
public interface PersonMapper { public List<Person> getPersonAll(); }
6.添加mapper.xml文件
<?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.mybatis.mapper.PersonMapper"> <resultMap id="BaseResultMap" type="com.mybatis.bean.Person"> <id property="id" column="id"></id> <result property="name" column="name"></result> <result property="age" column="age"></result> </resultMap> <!--id和接口的方法名必须相同--> <select id="getPersonAll" resultMap="BaseResultMap"> select * from person </select> </mapper>
需要注意的是:如果使用扫描的方式去扫描mapper.xml的配置文件 mapper.xml配置文件应和对应的接口应在同一个目录下,并且名字必须相同,不然会报错,提示mapper.xml文件没有注册 就是找不到mapper.xml
两种解决方法:
(1)因为我们在pom文件中添加了让maven将 src/main/java 下的配置文件参与打包(pom文件中,我打红色字体的下面的便签内容) 所以我们的mapper.xml可以直接放在java目录下和接口的同一个包下.
(2)或者是在resource目录下建立和 java 目录下放接口的包的相同目录结构 在相同的目录下放mapper.xml.
这样接口和mapper.xml在打包时就会存放在同一目录下 我们运行时可以看target目录,看看配置文件和编译的接口文件是否在同一目录下
7.在resources文件夹下添加日志的配置文件
log4j.properties:
# Global logging configuration\uff0c\u5efa\u8bae\u5f00\u53d1\u73af\u5883\u4e2d\u8981\u7528debug log4j.rootLogger=DEBUG, stdout # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
8.测试
public static void main(String[] args) throws IOException { //用字符串存储配置文件的路径 String config = "mybatisconfig.xml"; //将配置文件通过流读取到内存中 InputStream resourceAsStream = Resources.getResourceAsStream(config); //通过工厂构建者构建一个SqlSessionFactory (sql会话工厂) SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(resourceAsStream); //通过工厂 进行会话 SqlSession session = sf.openSession(); // session获取接口的字节码文件,构建一个代理对象 PersonMapper personMapper = session.getMapper(PersonMapper.class); // 通过代理对象调用方法 执行SQL语句 对数据的操作 List<Person> personAll = personMapper.getPersonAll(); System.out.println(personAll); //提交 session.commit(); //关闭会话 session.close(); }
执行结果: