可以把数据源的信息抽取到properties文件中。方便后期修改维护
创建一个属性文件内容如下
其中URL对于本地数据库名是localhost:3306的可以用如图中的方式进行配置,否则是什么仍然写什么
再配置文件中引入属性文件
(1)引入日志jar文件
(2)创建日志的配置文件 log4j.properties
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
(3)测试
(1)在mybatis配置文件中设置别名
(2)在映射文件文件中使用别名
为方法中的参数赋值或者sql语句中的参数赋值方式请见如图内容;<二中方式选择其一>
(1)mapper中的sql设置,
(2)Dao中的方法参数进行设置
此时的mapper.xml中可以这样写
(1)为查询的结果起别名-----与属性名一致。
(2)使用resultMap来创建属性与字段的映射关系
**注意**下面对数据类型设置顺序也不能变
《单一属性-->实体类对象association-->实体类集合对象collection》否则resultmap标签会报错
-----------------------------------------------------------------------------------------
相关内容属性含义如下;
<resultMap id="ClazzMap" type="Clazz">
<id column="c_id" property="cid"/>
<result column="c_name" property="cname"/>
<association property="teacher" javaType="Teacher">
<id column="t_id" property="tid"/>
<result column="t_name" property="tname"/>
association>
<collection property="students" ofType="Student">
<id column="s_id" property="sId"/>
<result column="s_name" property="sname"/>
collection>
resultMap>
一对一、多对一等无实例化理解欢迎参考https://blog.csdn.net/u013144287/article/details/79024130
(1)表与表之间的关系------->外键【从实际情况出发使用逻辑外键关联】
CREATE TABLE teacher(
t_id INT PRIMARY KEY AUTO_INCREMENT,
t_name VARCHAR(20)
);
//teacher class 一ge老师对多班
CREATE TABLE class(
c_id INT PRIMARY KEY AUTO_INCREMENT,
c_name VARCHAR(20),
teacher_id INT -- 外键
);
ALTER TABLE class ADD CONSTRAINT fk_teacher_id FOREIGN KEY (teacher_id)
REFERENCES teacher(t_id);
INSERT INTO teacher(t_name) VALUES('LS1');
INSERT INTO teacher(t_name) VALUES('LS2');
INSERT INTO class(c_name, teacher_id) VALUES('bj_a', 1);
INSERT INTO class(c_name, teacher_id) VALUES('bj_b', 2);
(2)java实体类如何维持这种一对多或多对一的关系。
Teacher {tid, tname}
Class {cid,cname,Teacher teacher}---->class 只包含老师id号。 多对一 可以在多(班级)的实体中添加一(教师)的实体类对象。
(1)要求根据班级号 查询班级信息并带上老师的信息。
两次查指将第一次查询的结果中某个值作为第二次查询的条件值
通过两次查询得到相应的结果
<association property="teacher" javaType="Teacher" column="teacher_id" select="findTeacherById">
<id column="t_id" property="tid"/>
<result column="t_name" property="tname"/>
association>
resultMap>
<select id="findClazzById" resultMap="ClazzMap">
select * from class where c_id=#{cid}
select>
<select id="findTeacherById" resultType="Teacher">
select t_id tid,t_name tname from teacher where t_id=#{tid}
select>
CREATE TABLE student(
s_id INT PRIMARY KEY AUTO_INCREMENT,
s_name VARCHAR(20),
class_id INT
);
INSERT INTO student(s_name, class_id) VALUES('xs_A', 1);
INSERT INTO student(s_name, class_id) VALUES('xs_B', 1);
INSERT INTO student(s_name, class_id) VALUES('xs_C', 1);
INSERT INTO student(s_name, class_id) VALUES('xs_D', 2);
INSERT INTO student(s_name, class_id) VALUES('xs_E', 2);
INSERT INTO student(s_name, class_id) VALUES('xs_F', 2);
一对多指一个班级对应多个学生,这里指的是
要求 根据班级id查询班级信息以及该班级下所有的学生信息。
注意:
在mapper.xml文件中的sql标签中写sql语句,例如标签,只能出现一个sql语句,不能出现两个,尤其存在赋值的情况,否则会出现参数数量溢出错误,即使另一个sql语句被注掉也不行,应该是后台程序执行也将其编译了,可以从所报的日志信息里面看到,被注掉的sql语句也出现了
xml 碰到特殊字符如何处理:
(1)常见的转移字符;
(2)使用CDATA 让您随心所欲不再考虑特殊字符写sql