发表于: 2017-08-04 21:58:08
7 1057
今天完成的事情:今天继续理解mybatis 使用它连接mysql 参照了很多 详细写下步骤 和理解先贴一下自己的结构
1 pom.xml添加依赖
2 建立数据库mybatis,创建user表
create database mybatis;
use mybatis;
CREATE TABLE user(
id int (11)NOT Null AUTO_INCREMENT,
username varchar(50) DEFAULT NULL,
age int(11) DEFAULT NULL,
Primary KEY(id)
)ENGINE=Innodb DEFAULT CHARSET=utf8;
随便插3条数据
3 配置Configuration.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>
<typeAliases>
<typeAlias alias="User" type="cn.bj.mybatis.model.User"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<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="root" />
</dataSource>
</environment>
</environments>
</configuration>
大意就是建立连接池 都是jdbc的东西 加载驱动 连接数据库
注意我加粗加下划线的地方 自己的数据库名称 用户名 密码
typeAliases 类型别名是为 Java 类型设置一个短的名字,就是后面type里面的简写成Typealises里面的。
它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余
4 定义表所对应的实体类(就是那个User)常用的get set方法 话说我看人能用快捷方法不知道怎摸弄的
public class User {private int id;
private String username;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
5 定义操作users表的sql映射文件User.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就是给这个文件起个唯一的名 就是文件的位置没有xml加上Mapper 但是教程都不是Idea的不放在Resources下所以我也有点不懂
<mapper namespace="cn.bj.mybatis.models.UserMapper">
//根据id查询Users表中对应的记录 返回 User对象 id是int类型
<select id="selectUser" parameterType="int" resultType="User">
select * from User where id = #{id}
</select>
</mapper>
6 在Configuration.xml文件中注册User.xml文件
(所有的mapper都由cofiguration这个文件管理)
<mappers>
<mapper resource="User.xml"/>
</mappers>
注意这里就是xml文件的位置 但是注意用 / 不用 . 例如 com/atguigu/day03_mybatis/test1/userMapper.xml
7 编写测试文件MybatisTest
public class MybatisTest {
public static void main(String[] args) {
SqlSessionFactory sqlSessionFactory = null;
SqlSession session = null;
String resource = "Configuration.xml";
InputStream inputStream;
try {
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
session = sqlSessionFactory.openSession();
System.out.println(session);
User user = (User) session.selectOne("cn.bj.mybatis.models.UserMapper.selectUser", 1);
System.out.println(user.getId());
System.out.println(user.getUsername());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (session != null) {
session.close();
}
}
}
}
这里就不是很理解了 大致是声明能执行映射文件中sql的sqlSession一个空值 声明session一个空值
String resource = "configuration.xml"; //加载mybatis的配置文件(它也加载关联的映射文件)
InputStream 声明了什么不知道
try里面 能执行映射文件中sql的sqlSession
映射sql的标识字符 打印出来 也不知道到底会打印出啥
执行查询返回一个唯一user对象的sql
(mybatis的sal语句写在 xml中 这里调用第五步骤里面 的User.xml 需要定位 就是有下划线的那个
是从下图 下划线 加上id的组合来的 唯一 来定位sql语句位置 )
跑一下 第一个不知道打印的是啥 然后打印第一行数据 就是成功了
大概 看了看junit 感觉还是先看懂mybatis 感觉挺难的 也挺需要时间
注意:斜体是注释理解 加黑加下斜线 是需要改的地方
明天计划的事情:仔细研究mybatis实现增删改查代码的具体含义
遇到的问题:很多错误 像上面加粗加下划线部分没有改对的 还有java需要XX 缺少; 等
还有Error:(85, 26) java: 不兼容的类型: java.util.Date无法转换为java.sql.Date收获:
这个仔细想了想 把import java.util.Date 改成了 java.sql.Date 就好了
这个配置个依赖 在main/resources下新建log4j.properties
#配置根目录Logger 优先级为INFO,A1 给输出的目的地起个名字方便下面的配置。log4j.rootLogger=INFO, A1 #配置输出目的地为控制台log4j.appender.A1=org.apache.log4j.ConsoleAppender #配置输出格式的布局(可以灵活地指定布局模式)log4j.appender.A1.layout=org.apache.log4j.PatternLayout #配置日志信息的输出格式log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n
就好了
评论