记录学习myBatis入门
导入maven依赖
在IDea创建maven项目之后,在pom.xml文件中导入本项目需要的jar包
对于maven找不到的jar包,我的做法是将电脑已有的jar包安装到maven本地仓库中
maven安装jar包命令:mvn install:install-file -Dfile=sqljdbc42.jar -Dpackaging=jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.2
命令解释:mvn install:install-file -Dfile=“jar包的绝对路径” -Dpackaging=“文件打包方式” -DgroupId=groupid名 -DartifactId=artifactId名 -Dversion=jar版本 (artifactId名对应之后maven配置的依赖名)
创建配置文件
mybatis通过配置文件使SQL语句和java代码的联系不那么紧密,加强了可重用性,提高了开发效率。
我将数据库通用的四个属性放到了jdbc.properties文件中,方便修改文件,操作不同数据库
jdbc.properties
driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc:sqlserver://localhost:1400;DatabaseName=ReadingOcean
username=my
password=mywodemima
创建config.xml文件,导入jdbc.properties文件,使用‘$()’获取文件的属性
<?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">
<!-- mybatis的主配置文件 -->
<configuration>
<!-- 引入配置文件-->
<properties resource="jdbc.properties"/>
<!-- 配置环境-->
<environments default="sqlServer">
<environment id="sqlServer">
<!-- 使用jdbc事务管理,事务控制由mybatis管理-->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源(连接池)-->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- 指定配置资源文件的位置,每个dao的独立配置文件-->
<mappers>
<mapper resource="com/dao/IUserDao.xml"/>
</mappers>
</configuration>
创建Users实体
对应数据库的实体,类中的属性名要与数据表的属性名一致
public class Users {
public Integer userId;
public String username;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String toString() {
return "Users{" +
"userId=" + userId +
", username='" + username + '\'' +
'}';
}
}
创建DAO接口,声明从数据库获取信息的抽象方法,虽然在这个简单项目中,不使用接口也可以
public interface IUserDao {
public List<Users> findAll();
}
IUserDao.xml,Dao接口的映射配置文件,在文件中使用SQL语句
文件的头部声明是‘mapper’,与config.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.dao.IUserDao">
<!-- 指定SQL语句返回的数据类型,id与dao的方法名相同-->
<select id="findAll" resultType="com.entity.Users">
select * from users
</select>
</mapper>
创建Test类进行测试
使用输入流读取配置文件,通过配置文件创建工厂类,工厂创建Dao的代理对象,调用方法。
import com.dao.IUserDao;
import com.entity.Users;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
import java.util.List;
import static java.lang.System.out;
public class Test {
public static void main(String[] args) throws Exception{
// 读取配置文件信息
InputStream inputStream = Resources.getResourceAsStream("config.xml");
// 创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);
// 创建SqlSession对象
SqlSession sqlSession = factory.openSession();
// 创建Dao接口的代理对象
IUserDao iUserDao = sqlSession.getMapper(IUserDao.class);
List<Users> usersList = iUserDao.findAll();
for (Users user: usersList) {
out.println(user);
}
// 随手关闭资源
sqlSession.close();
inputStream.close();
}
}