一. 配置文件
1. 导入坐标
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
2. 在资源目录下创建:com.###.mapper.UserMapper.xml,用于指定sql语句
<?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:相当于给当前mapper一个标识-->
<mapper namespace="userMapper">
<!-- resultType:指明当前sql执行的结果要封装给哪个实体-->
<select id="findAll" resultType="com.guazicola.domain.User">
select * from user
</select>
</mapper>
3. 在资源目录下创建: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">
<configuration>
<!-- 数据源环境配置-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件,与UserMapper连通-->
<mappers>
<mapper resource="com/guazicola/mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
4. 自行创建所需javaBean
二. 测试代码
public class MyBatisTest {
@Test
public void test1() throws IOException {
// 加载mybatis配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
// 获得session工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
// 获得session对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 执行操作,要执行什么sql,就用什么方法。参数:namespace+id
List<User> userList = sqlSession.selectList("userMapper.findAll");
System.out.println(userList);
// 释放session对象
sqlSession.close();
}
}
三. 其他数据库操作
1. 插入
com.###.mapper.UserMapper.xml:
<mapper namespace="userMapper">
<insert id="insert" parameterType="com.guazicola.domain.User">
insert into users values (#{id},#{name},#{age},#{address},#{money})
</insert>
</mapper>
测试代码:
public class MyBatisTest {
@Test
public void test1() throws IOException {
User user = new User();
user.setId(4);
user.setName("郭靖");
user.setAge(18);
user.setAddress("丐帮");
// 加载mybatis配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
// 获得session工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
// 获得session对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 执行操作,要执行什么sql,就用什么方法。参数:namespace+id
sqlSession.insert("userMapper.insert",user);
// 除查询操作外,都要提交事务才能生效
sqlSession.commit();
// 释放session对象
sqlSession.close();
}
}
三. 改进
1. 别名标签typeAliases:
com.###.mapper.UserMapper.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">
<configuration>
<!-- 为com.guazicola.domain.User起一个别名,这样在UserMapper.xml中就可以直接用user,
注意这个标签在配置文件中有一个顺序问题,顺序是properties?,settings?,typeAliases?-->
<typeAliases>
<typeAlias type="com.guazicola.domain.User" alias="user"/>
</typeAliases>
<!-- 下面的配置就和上面完全一样了-->
<!-- 数据源环境配置-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="mei19961209mjh."/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件,与UserMapper连通-->
<mappers>
<mapper resource="com/guazicola/mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
sqlMapConfig.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">
<!--namespace:相当于给当前mapper一个标识-->
<mapper namespace="userMapper">
<!-- 改了这个地方的user-->
<insert id="insert" parameterType="user">
insert into users values (#{id},#{name},#{age},#{address},#{money})
</insert>
</mapper>
2. 接口代理方式实现查找
这种方式不用在实现Dao层的时候,用namespace+id的方式去找sql,这样的话还要去翻xml配置文件。
改进之后,直接在service层调用Dao层的接口。通过配置xml,可以将接口和配置文件挂钩。而配置文件里写了sql,所以service层就通过调用Dao层的接口直接执行sql。
Usermapper.xml
<!--namespace:相当于给当前mapper一个标识-->
<!--namesapce必须是相应Dao层接口的包引用路径。-->
<mapper namespace="com.guazicola.dao.UserMapper">
<!-- id需要和接口中的方法名一致;resultType需要和返回值类型一致,如果有范型,写范型的类型;parameterType必须和方法中的形参类型一致-->
<select id="findById" resultType="user" parameterType="int">
-- 这里的#{id}和数据库中的名称保持一致
select * from users where id=#{id}
</select>
</mapper>
dao层的接口:
public interface UserMapper {
public List<User> findAll() throws IOException;
public User findById(int id) throws IOException;
}
service层的调用:
public class ServiceDemo {
public static void main(String[] args) throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.findById(1);
System.out.println(user);
}
}