具体操作如下
第一步: 在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文件,写入如下
xxxxxxxxxxjdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/testjdbc.username=rootjdbc.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文件,写入如下
xxxxxxxxxxjdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/testjdbc.username=rootjdbc.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)代码,这里记事本只写了一种情况