mybatis入门

    xiaoxiao2022-07-03  107

    mybatis01

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

    mybatis示例

    1.porm.xml

    <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.20</version> <scope>provided</scope> </dependency> </dependencies>

    2.创建实体类和dao接口

    3.创建SqlMapConfig

    <!-- 配置环境--> <environments default="mysql"> <!-- 配置MySQL环境--> <environment id="mysql"> <!-- 事务类型--> <transactionManager type="JDBC"></transactionManager> <!-- 连接池--> <dataSource type="POOLED"> <!-- 数据库连接基本信息--> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/> <property name="username" value="root"/> <property name="password" value=""/> </dataSource> </environment> </environments> <!-- 映射配置文件的位置 --> <mappers> <mapper resource="com/cc/mybatis/dao/UserDao.xml"></mapper> </mappers> </configuration>

    4.创建映射配置文件UserDao.xml

    <mapper namespace="com.cc.mybatis.dao.UserDao"> <select id="findAll" resultType="com.cc.mybatis.domain.User"> select * from user </select> </mapper>

    5.操作数据库

    //1.读取配置文件 InputStream in = Resources.getResourceAsStream("SqlMapConfig"); //2.创建SqlSessionFactory SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(in); //3.使用工厂生产SQLSession对象 SqlSession session = factory.openSession(); //创建dao接口的代理对象 UserDao userDao = session.getMapper(UserDao.class); //代理对象执行方法 List<User> users = userDao.findAll(); for (User user : users) { System.out.println(user); } //释放资源 session.close(); in.close(); 查询结果 /* User(id=56, username=cc, birthday=Wed May 22 00:00:00 CST 2019, sex=男, address=中国) User(id=57, username=cc, birthday=Wed May 22 00:00:00 CST 2019, sex=男, address=中国) User(id=58, username=cc, birthday=Wed May 22 00:00:00 CST 2019, sex=男, address=中国) User(id=59, username=cc, birthday=Wed May 22 00:00:00 CST 2019, sex=男, address=中国) User(id=60, username=cc, birthday=Wed May 22 00:00:00 CST 2019, sex=男, address=中国)*/

    mybatis注解方式

    删除UserDao.xml 在UserDao添加 @Select("select * from user") 修改SqlMapperConfig 将 <mappers> <mapper resource="com/cc/mybatis/dao/UserDao.xml"></mapper> </mappers> 替换为 <mappers> <mapper class="com.cc.mybatis.dao.UserDao"></mapper> </mappers>

    遇到的问题

    Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found for the Mapped Statement 'com.cc.mybatis.dao.UserDao.findAll'. It's likely that neither a Result Type nor a Result Map was specified. ### The error may exist in com/cc/mybatis/dao/UserDao.xml ### The error may involve com.cc.mybatis.dao.UserDao.findAll ### The error occurred while handling results ### SQL: select * from user ### Cause: org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found for the Mapped Statement 'com.cc.mybatis.dao.UserDao.findAll'. It's likely that neither a Result Type nor a Result Map was specified. at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141) at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:137) at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:75) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59) at com.sun.proxy.$Proxy2.findAll(Unknown Source) at com.cc.mybatis.test.MyBatisTest.main(MyBatisTest.java:33) Caused by: org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found for the Mapped Statement 'com.cc.mybatis.dao.UserDao.findAll'. It's likely that neither a Result Type nor a Result Map was specified. at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.validateResultMapsCount(DefaultResultSetHandler.java:287) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:189) at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64) at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79) at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63) at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324) at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148) ... 6 more

    Cause: org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found for the Mapped Statement ‘com.cc.mybatis.dao.UserDao.findAll’. It’s likely that neither a Result Type nor a Result Map was specified.

    没有找到查询封装的对象的返回类型

    UserDao.xml添加resultType=“com.cc.mybatis.domain.User”

    最新回复(0)