本篇文章只是为了快速创建一个Mybatis项目环境,并没有对知识点进行细致描述。 通过maven加载Mybatis依赖包 新建config.properties配置文件 新建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> <properties resource="config.properties"/> <typeAliases> <package name=""/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${database.driver}"/> <property name="url" value="${database.url}"/> <property name="username" value="${database.username}"/> <property name="password" value="${database.password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/StudentMapper.xml"/> </mappers> </configuration>编写SqlSessionFactoryUtils工具类
package com.Utils; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.apache.ibatis.io.Resources; import java.io.IOException; import java.io.InputStream; public class SqlSessionFactoryUtils { private final static Class<SqlSessionFactoryUtils> lock=SqlSessionFactoryUtils.class; private static SqlSessionFactory sqlSessionFactory=null; private SqlSessionFactoryUtils(){}; public static SqlSessionFactory getSqlSessionFactory(){ synchronized (lock){ if (sqlSessionFactory!=null){ return sqlSessionFactory; } String resource="mybatis-config.xml"; InputStream inputStream; try { inputStream=Resources.getResourceAsStream(resource); sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream); }catch (IOException e){ e.printStackTrace(); return null; } return sqlSessionFactory; } } public static SqlSession openSqlSession(){ if (sqlSessionFactory==null){ getSqlSessionFactory(); } return sqlSessionFactory.openSession(); } }编写Student实体类
package com.entity; public class Student { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } }编写StudentMapper接口
package com.mapper; import com.entity.Student; public interface StudentMapper { public Student getStudent(long id); }编写StudentMapper.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.mapper.StudentMapper"> <select id="getStudent" parameterType="long" resultType="com.entity.Student"> select id,name,age from student where id=#{id} </select> </mapper>数据库表结构 编写Main类
package com; import com.entity.Student; import com.mapper.StudentMapper; import com.utils.SqlSessionFactoryUtils; import org.apache.ibatis.session.SqlSession; public class Main { public static void main(String[] args){ SqlSession sqlSession=SqlSessionFactoryUtils.openSqlSession(); StudentMapper studentMapper=sqlSession.getMapper(StudentMapper.class); System.out.println(studentMapper.getStudent(1).toString()); } }注意:
Mapper.xml的namespace与Mapper.java类的包名要一致Mapper.xml中select元素的id属性值必须跟Mapper.java中方法名要一致报错 出现这个错误,可以看一下报错的内容:Could not find resource com/xml/StudentMapper.xml。一个很不好的习惯,把xml放在了java/com/xml包下,java包目录下就应该放java代码,放xml实在不应该。把xml文件放在resources目录下,便解决这个问题。实际就是查找resources/mapper目录的文件。
"C:\Program Files\Java\jdk1.8.0_131\bin\java.exe" "-javaagent:E:\IntelliJ IDEA 2018.1.6\lib\idea_rt.jar=59220:E:\IntelliJ IDEA 2018.1.6\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_131\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\rt.jar;C:\Users\林颖\Desktop\conmybatis\target\classes;C:\Users\林颖\.m2\repository\org\mybatis\mybatis\3.3.0\mybatis-3.3.0.jar;C:\Users\林颖\.m2\repository\mysql\mysql-connector-java\5.1.29\mysql-connector-java-5.1.29.jar;C:\Users\林颖\.m2\repository\log4j\log4j\1.2.17\log4j-1.2.17.jar;C:\Users\林颖\.m2\repository\org\slf4j\slf4j-api\1.7.12\slf4j-api-1.7.12.jar;C:\Users\林颖\.m2\repository\org\slf4j\slf4j-log4j12\1.7.12\slf4j-log4j12-1.7.12.jar" com.mian log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ### The error may exist in com/xml/StudentMapper.xml ### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com/xml/StudentMapper.xml at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:82) at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:66) at com.Utils.SqlSessionFactoryUtils.getSqlSessionFactory(SqlSessionFactoryUtils.java:29) at com.Utils.SqlSessionFactoryUtils.openSqlSession(SqlSessionFactoryUtils.java:41) at com.mian.main(mian.java:11) Caused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com/xml/StudentMapper.xml at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:115) at org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(XMLConfigBuilder.java:95) at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:80) ... 4 more Caused by: java.io.IOException: Could not find resource com/xml/StudentMapper.xml at org.apache.ibatis.io.Resources.getResourceAsStream(Resources.java:114) at org.apache.ibatis.io.Resources.getResourceAsStream(Resources.java:100) at org.apache.ibatis.builder.xml.XMLConfigBuilder.mapperElement(XMLConfigBuilder.java:338) at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:113) ... 6 more 进程完成,退出码 1修改之前:
Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.sql.SQLException: Error setting driver on UnpooledDataSource. Cause: java.lang.ClassNotFoundException: Cannot find class: ${database.driver}遇到这种问题肯定是config.properties跟 value="${database.xx}"两个文件其中一个写错了。