版权声明:本站所提供的文章资讯、软件资源、素材源码等内容均为本作者提供、网友推荐、互联网整理而来(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考,如有侵犯您的版权,请联系我,本作者将在三个工作日内改正。 https://blog.csdn.net/weixin_42323802/article/details/82497202
入门案例,看的eclipse,配置idea 有一脸懵逼
遇到错误如下,创建了4个项目前前后后,仍跑不起来,最后mybatis看差不多从新来搞。常见的问题如下:
PS:最后附上代码:
(1)DTD配置mybatis
eclipse配置不是配置的url 是配置的uri 这点要区分:
IDEA配置DTD约束给mybatis如下;
mybatis以及mapper约束:
<!-- .DTD文件是xml格式文件的约束文件,它约束了该xml文件使用的标签以及标签之间的关系 -->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- 该文件代表的是user类和user表的映射关系,关于user表的sql语句等等写在这里 -->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="model.User">
<!-- #{}代表占位符?,表示mybatis框架会接收输入的参数并赋值到sql语句当中
关于简单类型(int,String,date。long)可以使用value来代表参数名
-->
配置DTD:
(2)config文件在IDEA中创建为resources包
大家都知道在eclipse中直接创建资源配置包,在idea中先创建普通包,转化为资源包就可以了。
点击config包,右键.....
(3)时间报错处理
The server time zone value 报错,这个需要在jdbc中的jdbc.URL后面配置上时区。
下面三个可以更改时区,?不支持的可以用转义&(第三种)。
<property name="jdbcUrl"> jdbc:mysql://localhost:3306/exam?characterEncoding=utf8&serverTimezone=UTC </property>
<property name="jdbcUrl"> jdbc:mysql://localhost:3306/exam?serverTimezone=UTC </property>
<property name="jdbcUrl"> jdbc:mysql://localhost:3306/exam?characterEncoding=utf8&serverTimezone=UTC </property>
tset类:
package test;
import model.User;
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.IOException;
import java.io.InputStream;
/**
* @auther SyntacticSugar
* @data 2018/9/7 0007上午 11:03
*/
public class Demo {
public static void main(String[] args) {
try {
InputStream in = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(in);
SqlSession session = ssf.openSession();
int id = 30;
User user = (User) session.selectOne("model.User.findUserById",id);
System.out.println(user);
session.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
mybatis.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<!-- .DTD文件是xml格式文件的约束文件,它约束了该xml文件使用的标签以及标签之间的关系 -->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- 根标签 配置 -->
<configuration>
<!-- properties标签代表加载指定路径的properties文件 -->
<properties resource="jdbc.properties" >
</properties>
<!-- 环境(数据源信息) -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理,事务控制由mybatis-->
<transactionManager type="JDBC" />
<!-- 数据库连接池,由mybatis管理-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.DriverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="user.xml"/>
</mappers>
</configuration>
user.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<!-- 该文件代表的是user类和user表的映射关系,关于user表的sql语句等等写在这里 -->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="model.User">
<!-- #{}代表占位符?,表示mybatis框架会接收输入的参数并赋值到sql语句当中
关于简单类型(int,String,date。long)可以使用value来代表参数名
-->
<select id="findUserById" parameterType="java.lang.Integer" resultType="model.User">
select * from user where id=#{id}
</select>
<!-- ${}代表字符串拼接 -->
<!-- 插入的时候可以使用主键回填的策略,LAST_INSERT_ID() -->
</mapper>
UserDao层开发:
package dao;
import model.User;
import java.util.List;
public interface UserDao {
User findUserById(int id);//通过id 查询
List<User> findUserByName(String name );
}
impl实现类层:
package daoimpl;
import dao.UserDao;
import model.User;
import org.apache.ibatis.session.SqlSession;
import utils.MybatisUtils;
import java.util.List;
/**
* @auther SyntacticSugar
* @data 2018/9/7 0007下午 3:57
*/
public class DaoImpl implements UserDao {
/**
*
* 原始的dao实现方法有重复的部分 使用mapper代理来实现
* user.xml 中<mapper namespace="model.User">
* mapper namespace的名称和interface的名称保持一致。
*
* @param id
* @return
*/
// @Override
// public User findUserById(int id) {
// //获取会话
// SqlSession session = MybatisUtils.getFactory().openSession();
// User user = (User) session.selectOne("model.User.findUserById", id);//传入sql 以及要查询的id
// return user;
// }
//
// @Override
// public List<User> findUserByName(String name) {
// SqlSession session = MybatisUtils.getFactory().openSession();
// List<User> list = session.selectList("model.User.findUserByName", name);
// return list;
// }
@Override
public User findUserById(int id) {
return null;
}
}
使用mapper代理开发未完(避免重复代码)。
总之,看的视频也老,自己摸索跑起来很开心,有不对的地方望大家指出。