1.MyBatis的优化
1.1将连接数据库的配置信息单独放在一个properties文件中
创建db.properties文件,添加内容:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=123456
在conf.xml配置文件中:
<properties resource="db.properties"/> <!-- 存放文件路径--> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <!-- 使用${属性} --> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource>
1.2 为实体类定义别名,使用typeAliases标签
type: 实体类路径 alias:要起的别名
<typeAliases> <typeAlias type="com.zhiyou.zyl.bean.Users" alias="_Users"/> </typeAliases>
1.3 添加日志jar包,方面查找错误
添加Log4j的jar包:log4j-1.2.16.jar
创建log4j.properties文件:
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
结果类似于:
2.解决字段名与实体类属性名不相同的冲突
在创建表的实体类时,需要主动将实体类的属性和数据表中的字段名设置一样,但有时字段名和实体类中的属性不一致时,mybatis将不能解析该属性,这就要处理这种矛盾了。
测试的表和数据
CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20), order_price FLOAT); INSERT INTO orders(order_no, order_price) VALUES('aaaa', 23); INSERT INTO orders(order_no, order_price) VALUES('bbbb', 33); INSERT INTO orders(order_no, order_price) VALUES('cccc', 22);
实体类:
public class Order { private int id; private String no; private float price; }
解决冲突的两种方法:
第一种:在SQL语句中为查询的字段起别名
<select id="getOrder" parameterType="int" resultType="com.zhiyou.zyl.bean.Orders"> select order_id id, order_no no,order_price price from orders where order_id=#{id} </select>
第二中:使用<resultMap>标签
<select id="getOrder" resultMap="order"> <!-- resulyMap="resultMap标签ID名"--> select * from orders where order_id=#{id}
</select> <resultMap type="com.zhiyou.zyl.bean.Orders" id="order"> <id column="order_id" property="id"/> <!-- id为主键,result为其他字段,column为字段名,property为实体类属性--> <result column="order_no" property="no"/> <result column="order_price" property="price"/> </resultMap>