具体操作如下
第一步: 在src/main/java目录下新建com.huanf.dao.UserMapper接口,写入如下
public interface UserMapper {
public List<User> findAll() throws IOException;
}
第二步: 右键java目录,新建com.huanf.domain.User类,写入如下
//数据库中的user表数据
public class User {
//对应表中的字段
private int id;
private String username;
private String password;
//get和set方法
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 String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
第三步: 右键dao目录新建impl.UserMapperImpl类,写入如下
public class UserMapperImpl implements UserMapper {
public List<User> findAll() throws IOException {
//获得核心配置文件。注意写的是相对路径,也就是src/main/resources/sqlMapConfig.xml。注意下面那行的Resources包是org.apache.ibatis.io.Resources
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行操作,参数其实就是UserMapper.xml里面的<mapper>标签的namespace值,还有<select>标签的id值。语法namespace值.id值
List<User> userList = sqlSession.selectList("zidingyi_userMapper.findAll");//表示查询id为1的数据
return userList;
}
}
第四步: 右键com.huanf目录,新建service.ServiceDemo类,写入如下
public class ServiceDemo {
public static void main(String[] args) throws IOException {
//创建dao层对象,下面那行的UserMapper接口、UserMapperImpl实现类是我们在dao层写的
UserMapper userMapper = new UserMapperImpl();
List<User> all = userMapper.findAll();
System.out.println(all);
}
}
第五步: 在src.main.resources目录下新建com/huanf/mapper目录,里面新建File,文件名为UserMapper.xml,写入如下
xxxxxxxxxx
<mapper namespace="zidingyi_userMapper">
<!--查询操作。由于我们已经在sqlMapConfig.xml里面的<typeAliases>标签起了别名,所以下面那行的resultType值可以写成'bieming'-->
<select id="findAll" resultType="com.huanf.domain.User">
<!--查询结果会放到上面那行的resultType路径下-->
select * from user
</select>
</mapper>
第六步: 右键resources目录,新建jdbc.properties文件,写入如下
xxxxxxxxxx
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=228675
第七步: 右键resources目录,新建sqlMapConfig.xml文件。写入如下
<configuration>
<!--通过properties标签加载外部(resources目录)配置的properties文件-->
<properties resource="jdbc.properties"></properties>
<!--为UserMapper.xml里面的resultType属性,设置别名-->
<typeAliases>
<typeAlias type="com.huanf.domain.User" alias="bieming"></typeAlias>
</typeAliases>
<!--配置数据源环境。default表示默认情况下使用的是哪个环境,例如development,环境名是自定义的-->
<!--transactionManager指的是你要用哪种事务管理器,例如原生JDBC。dataSource指的是你要用哪种数据源,例如连接池POOLED-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<!--下面那行的'?useSSL=false&useUnicode=true&characterEncoding=UTF-8'可写可不写-->
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--加载映射文件-->
<mappers>
<mapper resource="com/huanf/mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
第八步: 在pom.xml里面写入如下
<dependencies>
<!--数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.31</version>
</dependency>
<!--引入MyBatis坐标-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!--引入Junit坐标,用于测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!--引入log4j,用于打印日志-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
第九步: 在ServiceDemo类里面运行测试
上面我们演示了'MyBatis的dao层实现'的传统实现方式,这种方式写的话,我们既要自己写接口,还要自己写实现类,过程麻烦 下面我们会演示'MyBatis的dao层实现'的代理开发方式,这种方式是企业开发的主流
一、 代理开发方式介绍
采用MyBatis的代理开发方式实现Dao层的开发,这种方式是后面我们进入企业的主流。Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口), 由MyBatis框架根据接口定义去创建接口的动态代理对象,代理对象的方法体跟Dao接口实现类方法相同。 简单说代理开发就是我们只需要编写Mapper接口,其它不用管交给MyBatis,例如实现类交给MyBatis来创建。注意我们编写的Mapper接口需要遵循以下规范:
1、Mapper.xml文件中的namespace与Mapper接口的全限定名相同
2、mapper接口方法名和Mapper.xml中定义的每个statement的id相同
3、Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同
4、Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同 注意下面的具体操作大部分是跟上面讲过的'传统实现方式'相同,下面要做的改动有: 删掉原dao目录下的impl目录、修改原UserMapper.xml、修改原ServiceDemo类
具体操作如下(我把全过程写下来了,代码基本没变,但是主要的变化就是上面那行我总结的改动)
第一步: 在src/main/java目录下新建com.huanf.dao.UserMapper接口,写入如下
public interface UserMapper {
public List<User> findAll() throws IOException;
}
第二步: 右键java目录,新建com.huanf.domain.User类,写入如下
//数据库中的user表数据
public class User {
//对应表中的字段
private int id;
private String username;
private String password;
//get和set方法
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 String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
第三步: 右键com.huanf目录,新建service.ServiceDemo类,写入如下
public class ServiceDemo {
public static void main(String[] args) throws IOException {
//获得核心配置文件。注意写的是相对路径,也就是src/main/resources/sqlMapConfig.xml
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//获得session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得session会话对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//使用getMapper获得mapper代理对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//执行操作
List<User> all2 = mapper.findAll();
System.out.println(all2);
}
}
第四步: 在src.main.resources目录下新建com/huanf/mapper目录,里面新建File,文件名为UserMapper.xml,写入如下
<mapper namespace="com.huanf.dao.UserMapper">
<!--上面那行的全限定名是我们在dao目录下写的UserMapper接口的全限定名-->
<!--下面那行的id值需要写'我们在dao目录下写的UserMapper接口'的方法名,例如findAll(),那么写findAll即可-->
<!--下面那行没有写parameterType属性,原因是我们写的UserMapper接口的findAll()方法是不带参的-->
<!--下面那行的resultType值需要我们写'我们在dao目录下写的UserMapper接口的方法'的返回值,例如List<User>,那么写User的全限定名即可,或者别名-->
<select id="findAll" resultType="com.huanf.domain.User">
<!--查询结果会放到上面那行的resultType路径下-->
select * from user
</select>
</mapper>
第五步: 右键resources目录,新建jdbc.properties文件,写入如下
xxxxxxxxxx
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=228675
第六步: 右键resources目录,新建sqlMapConfig.xml文件。写入如下
xxxxxxxxxx
<configuration>
<!--通过properties标签加载外部(resources目录)配置的properties文件-->
<properties resource="jdbc.properties"></properties>
<!--为UserMapper.xml里面的resultType属性,设置别名-->
<typeAliases>
<typeAlias type="com.huanf.domain.User" alias="bieming"></typeAlias>
</typeAliases>
<!--配置数据源环境。default表示默认情况下使用的是哪个环境,例如development,环境名是自定义的-->
<!--transactionManager指的是你要用哪种事务管理器,例如原生JDBC。dataSource指的是你要用哪种数据源,例如连接池POOLED-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<!--下面那行的'?useSSL=false&useUnicode=true&characterEncoding=UTF-8'可写可不写-->
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--加载映射文件-->
<mappers>
<mapper resource="com/huanf/mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
第七步: 在pom.xml里面写入如下
xxxxxxxxxx
<dependencies>
<!--数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.31</version>
</dependency>
<!--引入MyBatis坐标-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!--引入Junit坐标,用于测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!--引入log4j,用于打印日志-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
第八步: 在ServiceDemo类里面运行测试
注意演示的是,UserMapper接口里面的方法不带参数的情况,如果想玩带参数的话,请前去看我写的具体项目(mybatis_dao)代码,这里记事本只写了一种情况