您的位置:首页 > 数据库

个人学习历程之菜鸟初体验mybatis高级映射一对一查询

2017-04-22 21:14 435 查看
学习mybatis最闹心的莫过于sql语言了,这对于本人来说实在是个大大的痛楚啊,都说mybatis学起来简单,我觉得那都是些大牛才能说出的话,看来本人还得把数据库相关的知识拿来硬啃了。哎,进入今天的mybatis的历程了。。。

要学好数据库中表与表之间的关系,这得花时间去琢磨清楚,不幸的是本人还在摸索当中,只是探知了一小部分,只能从小的方面去研究了,这里只给出了四张表(够晕头转向一阵子了),分别为User,orders,orderdetail,items.

CREATE TABLE orders(
id INT(11) KEY AUTO_INCREMENT,
user_id INT(11) NOT NULL,
number VARCHAR(32),
createtime DATETIME,
note VARCHAR(100)
);

CREATE TABLE orderdetail(
id INT(11) KEY AUTO_INCREMENT,
orders_id INT(11) NOT NULL,
items_id INT(11),
items_num INT(11)
);
CREATE TABLE items(
id INT(11) KEY AUTO_INCREMENT,
NAME VARCHAR(32) NOT NULL,
price FLOAT(10,1),
detail TEXT,
pic VARCHAR(512),
createtime DATETIME
);


表的内容并不完善,有知道如何完善的大神请伸出您的手,望能指点指点小弟,在下感激不尽,等我练就神功定不忘指点之恩。

要一对一的查询,第一件事就得编写sql语句

Select
orders.*,
user.username,
user.sex,
user.address from orders,
user where orders.user_id=user.id


此处的关联连接是用的内链接,因为外键关联的关系,通过外键查询出来的数据只有一条,所以此处可以使用内链接的方式进行关联。

算是把sql语句给写完了,现在就得来分析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="com.itsky.day02.OrdersMapperCustom">
<select id="findOrdersUser" resultType="com.itsky.day02.OrdersCustom">
Select orders.*, user.username, user.sex, user.address from orders, user where orders.user_id=user.id
</select>
</mapper>


id为唯一标识,parameterType为传入的参数类型,因为这里没有涉及到参数的传入,所以parameter可以不要;resultType为返回值类型,这个就很讲究了,因为普通的pojo是不能满足要求,所以这里得重新定义一个pojo类,里面的参数要和查询的数据想吻合,所以这个pojo可以继承一个参数较多的数据库对应类,把参数较少的那些数据手动的添加进去。这里写的是一个OrdersCustom类。

public class OrdersCustom extends Orders{
private String  username;
private String sex;
private String address;
public String getUsername() {
return username;
}


这样就把该有的数据全部包含进去了。对了,还有一个namespace没说到,这里的参数传入的是接口地址。

现在就写出接口类

public interface OrdersMapperCustom {
public List<OrdersCustom>findOrderUser();

}


里面提供了一个查询方法;

最后就来测试啦(感觉我要怀疑人生了,每次到测试的时间总是会出现一些莫名错误)

@Before
public void setUp() throws Exception {
// 1、读取配置文件
String resource = "applicationContext.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
// 2、根据配置文件创建SqlSessionFactory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}

@Test
public void testForFindOrdersUser() {
SqlSession sqlSession=sqlSessionFactory.openSession();
OrdersMapperCustom ordersMapperCustom = sqlSession.getMapper(OrdersMapperCustom .class);
List<OrdersCustom>list=ordersMapperCustom .findOrderUser();
System.out.println(list);

}


结果

log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory).

log4j:WARN Please initialize the log4j system properly.

log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

[]

没有提示错误,每张表里没数据,mybatis高手请多多指教,本人还是一只小小菜鸟。。。如果能给点好的资料就更好了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis 数据库 sql